cd сценария оболочки завершается ошибкой, хотя путь правильный

Мне нужно сделать скрипт для извлечения tar в указанном месте.

Я сделал что-то простое, например:

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

Если я выполняю команды вручную, все в порядке. Если я сохраню их в .sh, а затем использую #bash script.sh, я получаю следующую ошибку: «Не каталог cd: /var/www/html». Любая идея, почему?

Ты за твое время.

Примечания: я попробовал версию сценария на виртуальной машине (CentOS 5.5), и сценарий работал нормально, проблема возникает на реальной машине, где я хочу ее использовать (я использовал тот же образ диска ОС, те же конфигурации, что и на виртуальной машине. .. это делает это действительно очень странным для меня).

Добавлено: также я пытаюсь вызвать что-то вроде запуска службы mysqld ... это также не говорит о том, что каталог не существует (тем не менее, если я запускаю вручную, он работает.).


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, ввод в Windows — \r\n, а в Linux — \n. Скрипт работал на вм, потому что код для ввода был правильным, а на втором компьютере с родным линуксом он был неправильным. Я создал точно такой же скрипт на linux, и все вернулось на 2 нормально ;). Примечание... часть mkdir сработала, потому что я использовал другой упрощенный скрипт, написанный для Linux.   -  person zozo    schedule 13.07.2011


Ответы (3)


Я решил задачу - это довольно интересно).

Я создал скрипт на виртуальной машине, работающей в Windows с ОС Centos, ввод в Windows — «\r\n», а в Linux — «\n».

Скрипт работал на вм, потому что код для ввода был правильным, а на втором компьютере с родным линуксом он был неправильным. Я создал точно такой же скрипт на 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