Я пытаюсь проверить, существует ли символическая ссылка в bash. Вот что я попробовал.
mda=/usr/mda
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
mda='/usr/mda'
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
Однако это не работает. Если '!' опущено, оно никогда не срабатывает. И если '!' там, это срабатывает каждый раз.
Ответы:
-L
возвращает true, если «файл» существует и является символической ссылкой (связанный файл может существовать или не существовать). Вы хотите-f
(возвращает true, если файл существует и является обычным файлом) или, может быть, просто-e
(возвращает true, если файл существует независимо от типа).Согласно man-странице GNU ,
-h
идентична-L
, но согласно man-странице BSD , она не должна использоваться:источник
!
являетсяif ! [ -L $mda ]; then .... fi
то поставить восклицательный знак вне квадратных скобок.if [ ! -L "$mda" ]; then ... fi
(примечание:if [ ! ... ]
иif ! [ ... ]
идентичны :)-L
и-h
так же .man test
также подтверждает это.-L - это проверка на наличие файла, а также символическая ссылка
Если вы не хотите проверять, является ли файл символической ссылкой, а просто проверить, существует ли он независимо от типа (файл, каталог, сокет и т. Д.), Используйте -e
Таким образом, если файл действительно файл, а не просто символическая ссылка, вы можете выполнить все эти тесты и получить состояние выхода, значение которого указывает на состояние ошибки.
источник
-e "${file}"
терпит неудачу, если символическая ссылка существует, но ее цель не существует.Вы можете проверить наличие символической ссылки и ее отсутствие:
Итак, полное решение:
источник
Может быть, это то, что вы ищете. Проверить, существует ли файл и не является ли он ссылкой.
Попробуйте эту команду:
источник
Как насчет использования
readlink
?источник
Является ли файл действительно символической ссылкой? Если нет, то обычным тестом на существование является
-r
или-e
.См
man test
.источник
Если вы проверяете наличие файлов, вы хотите -e, а не -L. -L тесты на символическую ссылку.
источник
Сначала вы можете сделать с этим стилем:
если вы хотите сделать это в более продвинутом стиле, вы можете написать это так:
результат выше, как:
источник