shell script cd се проваля, въпреки че пътят е правилен

Трябва да направя скрипт за извличане на tar на определено място.

Направих нещо просто като:

cp test.tar /var/www/html
cd /var/www/html
tar xvf test.tar

Ако изпълня командите на ръка всичко е ОК. Ако ги запиша в .sh и след това използвам #bash script.sh, получавам следната грешка ": Not a directory cd: /var/www/html". Някаква идея защо?

Тай за вашето време.

Бележки: Опитах версията на скрипта на виртуална машина (CentOS 5.5) и скриптът работи добре, проблемът възниква на реалната машина, където искам да го използвам (използвах същото изображение на диска на OS, същите конфигурации като на виртуалната машина. .. това го прави наистина много странно за мен).

Добавено: Също така се опитвам да извикам нещо като service mysqld start... това също се проваля, казвайки, че dir не съществува (все пак, ако стартирам на ръка, работи.).


person zozo    schedule 13.07.2011    source източник
comment
ако „html“ не съществува, командата за копиране ще преименува вашия test.tar на „html“. Уверете се, че това наистина е директория, а не копие на вашия файл.   -  person Cfreak    schedule 13.07.2011
comment
Има ли шанс да изпълнявате скрипта като друг потребител? Опитайте да добавите 'whoami' и 'ls -la /var/www' в горната част на вашия скрипт и сравнете резултата, който ви дават с това, което получавате, когато ги стартирате директно от командния ред.   -  person Costa    schedule 13.07.2011
comment
Реших проблема (Може ли някой да добави това като отговор? - доста е интересно). Създадох скрипта на виртуална машина, работеща на windows с centos os, въвеждането в windows е \r\n, докато в linux е \n. Скриптът работеше на vm, защото кодът за enter беше правилен, докато на втория компютър, с родния Linux, беше неправилен. Създадох точно същия скрипт на linux и всичко се върна 2 пъти нормално ;). Забележете... частта mkdir работи, защото използвах друг, опростен скрипт, написан на linux.   -  person zozo    schedule 13.07.2011


Отговори (3)


Реших проблема - доста е интересен).

Създадох скрипта на виртуална машина, работеща на windows с centos os, въвеждането в windows е "\r\n", докато в linux е "\n".

Скриптът работеше на vm, защото кодът за enter беше правилен, докато на втория компютър, с родния Linux, беше неправилен. Създадох точно същия скрипт на linux и всичко се върна 2 пъти нормално ;).

Забележете... частта mkdir работи, защото използвах друг, опростен скрипт, написан на linux.

person zozo    schedule 13.07.2011

Във връзка с това открих, че символът "~" изглежда не работи в bash, така че ако го използвате, опитайте да го замените с пълния път.

person mpelzsherman    schedule 22.08.2012
comment
Благодаря. Това е, на което се натъквах. И възможно решение е просто да замените ~ с $HOME на място (в случай че не можете да промените източника на данни): cd ${DirectoryString/#\~/$HOME} - person Jason Doucette; 30.04.2016
comment
В коя дистрибуция и версия '~' изглежда не работи в bash? Може би $HOME допринася за четливостта, но '~' всъщност работи във всички версии и дистрибуции на bash, които познавам. (gnu.org/software/bash/manual/html_node/Tilde -Expansion.html) - person Alan Rezende; 04.05.2020

Изглежда, че вашият cp може да копира test.jar към файла html в директорията www. Уверете се, че html съществува и е директория, преди да опитате cp.

mkdir -p /var/www/html
cp test.tar /var/www/html
cd /var/www/html
tar xvf test.tar
person Andrew White    schedule 13.07.2011
comment
Единственият начин cd да даде това съобщение за грешка е целта да НЕ е директория - person Andrew White; 13.07.2011
comment
Изглежда, че скриптът е създал файл, наречен html? (дори мислех, че html съществува) и се опитах да копирам в него... това решава половината от проблема (актуализирано с втората половина) - person zozo; 13.07.2011