Почему следующая bash
проверка, если каталог не удается?
if [ ! -d "~/Desktop" ]; then
echo "DOES NOT EXIST"
exit 1;
fi
~/Desktop
действительно существует. Это на Mac, кстати.
Проблема с этим типом скрипта
read -p "Provide the destination directory: " DESTINATION
if [ ! -d $DESTINATION ]; then
echo "\t'$DESTINATION' does not exist." >&2;
exit 1;
fi
cd "~/Desktop"
вы также получаете ошибку. Он должен быть заключен в кавычки или сохранен как переменная (без кавычек). Например,a=~/Desktop; cd $a;
работает, но неa="~/Desktop"; cd Desktop;
смотри. Serverfault.com/questions/417252/…Ответы:
Джастин разъяснил свой вопрос в своем первом комментарии к ответу Кванты. Он читает строку текста, используя
read
(или каким-либо другим динамическим способом) и хочет расширить тильду.Возникает вопрос: «Как выполнить расширение тильды для содержимого переменной?»
Общий подход заключается в использовании
eval
, но он сопровождается некоторыми важными оговорками, а именно пробелами и выходным перенаправлением (>
) в переменной. Кажется, мне подходит следующее:Попробуйте это с каждым из следующих входов:
объяснение
${mypath//>}
Полоски из>
символов , которые могут затирать файл во времяeval
.eval echo ...
то, что фактическое расширение тильдыeval
для поддержки имен файлов с пробелами.В дополнение к этому вы можете улучшить UX, добавив
-e
опцию:Теперь, когда пользователь вводит тильду и нажимает на вкладку, она будет расширяться. Однако этот подход не заменяет вышеприведенный подход, поскольку расширение происходит только в том случае, если пользователь нажимает вкладку. Если он просто наберет ~ / foo и нажмет enter, он останется тильдой.
Смотрите также:
источник
Удалите двойные кавычки вокруг каталога, чтобы увидеть, работает ли он:
Причина в том, что расширение тильды работает только тогда, когда оно не заключено в кавычки.
info "(bash) Tilde Expansion"
источник
DESTINATION
есть~/Desktop
.Он не работает не только на Mac, но и на любой платформе, на которой работает bash.
Когда вы цитируете «~ / Desktop», вы говорите bash искать Desktop внутри папки ~. Цитата удаляет специальную цель ~
Смотрите - http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion
Удалите двойные кавычки, и это должно работать.
источник
бегать
используйте
$HOME
и убедитесь, что пользователь действительно использует скрипт. если root использует~
его/root
, то нет/home/$USER
.источник
должен быть $ HOME вместо ~
~ вещь КЛАВИАТУРЫ
источник