Mam 64-bitowy serwer dedykowany CentOS 6.5. Jedyne, co na nim zrobiłem yum install java7
, to nie zainstalowałem żadnych innych rzeczy.
Więc w katalogu /root
zrobiłem ten plik ( 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
Wiem, że nie ma nic złego w kodzie, ponieważ wypróbowałem inne (z oficjalnych stron) i otrzymuję te same błędy.
Więc jeśli to zrobię:
cd /root
bash test.sh
Otrzymuję ten błąd
test.sh: line 7: syntax error near unexpected token `done'
test.sh: line 7: `done'
Jeśli zrobię
cd /root
./test.sh
Otrzymuję ten błąd
-bash: ./test.sh: Permission denied
Próbowałem również zrobić to w katalogu /home
i dostaję te same błędy.
PS. Jestem zalogowany jako root za pośrednictwem SSH.
echo $USER
mówi Costat -c '%a' "./test.sh"
mówi Twój powyższy kod działa dla mnie. Zapomniałeśchmod +x /root/test.sh
?Odpowiedzi:
Naprawianie uprawnień
Dość pewny, że skrypt nie jest wykonywalny. W tym celu należy ustawić flagę wykonywalną dla bieżącego użytkownika, uruchamiając:
Powinieneś być w stanie uruchomić go jako:
To znaczy, jeśli obecnie działasz jako root (sprawdź za pomocą
whoami
).Jeśli chcesz, aby skrypt mógł być wykonywany przez innego użytkownika w systemie, musi to być
chmod og+x
(„inni i grupa możliwa do wykonania”), jednak to nie zadziała, jeśli sam skrypt jest zapisany/root
, co nie jest możliwe do odczytania przez innych użytkowników niż sam root.Naprawianie błędów kopiowania i wklejania
Z
/bin/bash^M
komunikatu o błędzie wynika, że linia CRLF systemu Windows kończy się na nim (\r\n
), która powinna być linuksową linią nowej linii (\n
).Aby to usunąć, możesz uruchomić następujące pliki:
Albo to:
źródło
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory
Zrobiłem „ls” i plik tam był.#!/bin/bash
ponownie.