Применить ссылку для чтения к файлу без символической ссылки?

Если ваша оболочка поддерживает встроенную переменную PPID , вы можете использовать эту переменную, если вас действительно интересует PID процесса, вызвавшего оболочку.

Если вас интересует PID этой оболочки и вы хотите передавать его другим, используйте $$ .

0
24.03.2018, 18:09
2 ответа

Я думаю, есть ли разница или нет, зависит от конкретной версии Unix, которую вы используете. Например, в OSX readlink не имеет флага -fи указывает:

If the given argument is not a symbolic link, readlink will print nothing and exit with an error

Если вы знаете, что ваша ОС поддерживает флаг -f, то разницы быть не должно.

На самом деле флаг-m может быть наиболее гибким в использовании.

2
28.01.2020, 02:32

Вы должны использовать "$0"и dirname "$()".

Команды не эквивалентны, поскольку проверка оболочки влияет только на последний компонент в пути, а readlink -fвлияет на все уровни пути.

mkdir physdir
touch physdir/file
ln -s physdir symlink
test -L symlink/file ; echo $?
    1
test -L symlink ; echo $?
    0
dirname symlink/file
    symlink
dirname "$(readlink -f symlink/file)"
    /crypto/home/hl/tmp/stackexchange/readlink/physdir

Таким образом, для относительных путей вывод сильно отличается, но даже для абсолютных путей каталоги символических ссылок внутри различаются.

2
28.01.2020, 02:32

Теги

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