Как проверить, существует ли путь?

В двух словах рассматриваемое утверждение означает, как предложил PSkocik в комментарии, что с bar() {... } > fooвам не нужно беспокоиться о перезаписи fooдо тех пор, пока ваша функция bar()не начнет выполняться. То есть, просто запустить скрипт, который определяет bar, недостаточно, чтобы перезаписать foo, вам действительно нужно вызватьbar:)

На практике это также означает, что вы можете перенаправлять с помощью переменных, > "$foo"а не > foo, потому что переменная не будет расширена/вычислена до вызова функции.

Подробное обсуждение этого и других деталей перенаправления функций можно найти здесь:http://www.linuxjournal.com/content/more-bash-redirections

1
07.11.2019, 09:22
1 ответ

Чтобы проверить, существует ли /some/pathлибо как что-то, что может быть полностью разрешено, либо как неработающая символическая ссылка:

if [ -e /some/path ] || [ -h /some/path ]; then
    echo '/some/path exists, possibly as a broken symbolic link'
fi

Тест -hверен для символической ссылки, независимо от того, повреждена она или нет. Существует также -Lтест, который идентичен -hтесту (исторические причины ).

Тесты -eзавершатся неудачей, если указанный путь со всеми разрешенными символическими ссылками не может быть найден. Вот почему нам, возможно, придется использовать -hв отдельном тесте, если мы ожидаем, что компонент имени файла нашего пути является неработающей символической ссылкой.

3
27.01.2020, 23:29

Теги

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