Проблема с использованием команды cd с «~» или «$ HOME» в сценарии bash

Мы знаем, что ~ и $HOME ссылаются на домашний каталог текущего пользователя. (Для меня echo ~ = echo $HOME = pandya).

Но я не могу использовать это в скриптах bash. Вот простой пример сценария:

#!/bin/bash
echo -n "Enter Directory Path:"
read dir1
cd $dir1

Но при выполнении он выдает ошибку No such file or directory следующим образом:

$ ./script
Enter Directory Path:~/Desktop
./script: line 4: cd: ~/Desktop: No such file or directory

Если вместо него используется /home/pandya из ~, то он работает.

Та же проблема с $HOME.

Таким образом, как правильно использовать cd с ~ или $HOME в таких сценариях bash?

5
задан 13 August 2014 в 13:55

3 ответа

Можно решить эту проблему при помощи оценка команда:

#!/bin/bash
echo -n "Enter Directory Path:"
read dir1
eval cd "$dir1"

, поскольку в Вашем коде $dir1 не сохранит ~/Desktop, но он сохранит /home/user/Desktop, таким образом, можно будет использовать команду оценки.

Для понимания команда Eval Здесь

0
ответ дан 13 August 2014 в 13:55

Вот пример, который работает.

, Как сказано прежде, расширение переменных от входа является ключом.

#!/bin/bash
echo -n "Dir:"
read dir1
dir2=`eval echo $dir1`
cd $dir2
pwd

, Конечно, Вы не должны ожидать, что Ваша текущая оболочка изменит свой рабочий каталог после выполнения сценария. Это останется незатронутым.

0
ответ дан 13 August 2014 в 13:55

Проблемой является расширение тильды, происходит перед переменным расширением (см. man bash для деталей). Переменное расширение происходит только однажды, таким образом $dir1 расширен, но строка $HOME внутренняя часть это не.

могло бы быть легче определить путь к каталогу как параметр командной строки вместо того, чтобы использовать read для чтения его из консоли: оболочка развернет его для Вас:

#!/bin/bash
dir1=$1
cd "$dir1"
pwd

и вызов это как

./script ~/Desktop

Другая альтернатива должна использовать диалоговое окно файла вместо того, чтобы ввести путь вообще:

dialog --dselect / 20 20
0
ответ дан 13 August 2014 в 13:55

Другие вопросы по тегам:

Похожие вопросы: