Я пишу сценарий оболочки, который принимает в качестве единственного аргумента каталог. Мне нужно проверить, существует ли каталог, прежде чем я сделаю что-нибудь еще. Каталог может быть абсолютным или относительным. Я знаю, что я могу проверить наличие абсолютного каталога (например,/Users/Keith/Документы/TestFolder) с использованиемBash: проверьте, существует ли относительный путь
if [ -d "$1"]; then
# do something if the absolute directory exists
fi
Однако, если рабочий каталог/Users/Китом/Документы/и Звоню сценарий и передать только «TestFolder», тогда тест в этом операторе if будет оцениваться как false, хотя TestFolder существует в текущем рабочем каталоге.
Я попытался преобразования каталог в абсолютный каталог с помощью
abs_path=`cd "$1"; pwd`
, а затем проверить на наличие абсолютного пути, используя, если заявление выше. Это прекрасно работает (признает, что «TestFolder» существует, даже если это все, что я передаю в качестве аргумента) при условии, что каталог, переданный скрипту, действительно существует, но если он этого не сделает, это не сработает.
Что мне нужно - это способ определить, существует ли каталог, переданный в качестве аргумента, независимо от того, передан ли он как абсолютный каталог или тот, который относится к текущему рабочему каталогу пользователя, и он не может завершиться ошибкой, если каталог не существует.
У меня явно нет эксперта по bash - любой совет будет очень благодарен!
Хорошо, что слегка неловко ... Вы правы! Он работает. Я провел последний час, работая в одном каталоге слишком далеко, поэтому он не работал. Возможно, кодирование поздно не для меня. Спасибо за вашу помощь и за рекомендацию readlink. Похож на отличный вариант для будущего использования. – kcstricks