Lỗi Bash khi đang chạy script


1

Tôi có một máy chủ chuyên dụng CentOS 6.5 64 bit. Điều duy nhất tôi làm trên đó là yum install java7, vì vậy tôi chưa cài đặt bất kỳ thứ gì khác.

Vì vậy, trong thư mục /roottôi đã tạo tập tin này ( test.sh)

#!/bin/bash
while true
do
    echo "Hey"
        echo "You have five seconds to do 'Ctrl+C' or the while loop will continue."
    sleep 5
done

Tôi biết không có gì sai với mã, bởi vì tôi đã thử một số khác (Từ các trang web chính thức) và tôi nhận được các lỗi tương tự.

Vì vậy, nếu tôi làm:

cd /root
bash test.sh

Tôi gặp lỗi này

test.sh: line 7: syntax error near unexpected token `done'
test.sh: line 7: `done'

Nếu tôi làm

cd /root
./test.sh

Tôi gặp lỗi này

-bash: ./test.sh: Permission denied

Tôi cũng đã thử làm điều này trong thư mục /homevà tôi nhận được các lỗi tương tự.

Tái bút Tôi đã đăng nhập bằng root thông qua SSH.


echo $USERnói gì Nó stat -c '%a' "./test.sh"nói gì Mã của bạn ở trên làm việc cho tôi. Bạn đã quên chmod +x /root/test.sh?
polym

$ USER nói "root" stat -c '% a' "./test.sh" nói "644"
user3524823

Bạn đã quên thêm cờ thực thi. Nhìn vào câu trả lời của @ slhck dưới đây. Là mã ở trên giống như nó được hiển thị ở đây? Tôi không hiểu tại sao bạn gặp lỗi dòng 7.
polym

Nó chính xác cùng mã. Chỉ cần sao chép và dán nó để kiểm tra lại.
dùng3524823

Câu trả lời:


3

Quyền sửa chữa

Khá chắc chắn rằng kịch bản không thể thực thi. Vì vậy, bạn cần đặt cờ thực thi cho người dùng hiện tại bằng cách chạy:

chmod u+x /root/test.sh

Sau đó, bạn sẽ có thể chạy nó như:

cd /root
./test.sh

Đó là, nếu bạn hiện đang chạy bằng root (kiểm tra với whoami).

Nếu bạn muốn tập lệnh được thực thi bởi người dùng khác trên hệ thống, thì tập lệnh đó phải là chmod og+x("những người khác và nhóm có thể xóa được"), tuy nhiên điều đó sẽ không hoạt động nếu chính tập lệnh đó được lưu /rootbởi người dùng khác không thể đọc được hơn gốc.

Sửa lỗi sao chép-dán

Dường như từ /bin/bash^Mthông báo lỗi của bạn rằng bạn có một dòng Windows CRLF kết thúc ở đó ( \r\n), đây chỉ là một dòng mới của Linux ( \n).

Để loại bỏ điều này, bạn có thể chạy như sau trên tệp:

sed -i 's/\r//' test.sh

Hoặc này:

dos2unix test.sh

Khi tôi làm ./test.sh tôi gặp lỗi này. -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory Tôi đã làm "ls", và tập tin đã ở đó.
dùng3524823

Bạn dường như có một lỗi sao chép-dán trong dòng hashbang (dòng đầu tiên trong tập lệnh của bạn). Một số nhân vật chưa biết ở cuối dòng. Xóa nó hoàn toàn, bao gồm cả phần đầu của dòng tiếp theo và viết #!/bin/bashlại.
slhck

Nó có thể là ngắt dòng hoặc một cái gì đó?
dùng3524823

Khá chắc chắn, vâng. Tôi đã cập nhật câu trả lời của mình với một số hướng dẫn về cách thoát khỏi nó.
slhck

Cảm ơn! Nó hoạt dộng bây giờ. ´sed -i 's / \ r //' test.sh
dùng3524823
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.