Самый простой способ связать текущий каталог как абсолютный путь, не набирая всю строку пути, был бы
ln -s "$(pwd)/foo" ~/bin/foo_link
target
(Первый) аргумент для ln -s
команды работает относительно местоположения символической ссылки, а не в текущем каталоге. Это помогает узнать, что, по сути, созданная символическая ссылка (второй аргумент) просто содержит текст , предоставленный вами для первого аргумента.
Поэтому, если вы делаете следующее:
cd some_directory
ln -s foo foo_link
а затем переместить эту ссылку вокруг
mv foo_link ../some_other_directory
ls -l ../some_other_directory
вы увидите, что он foo_link
пытается указать foo
в каталоге, в котором он находится. Это также работает с символическими ссылками, указывающими на относительные пути. Если вы делаете следующее:
ln -s ../foo yet_another_link
а затем перейдите yet_another_link
в другой каталог и проверьте, куда он указывает, вы увидите, что он всегда указывает на ../foo
. Это предполагаемое поведение, поскольку символические ссылки часто могут быть частью структуры каталогов, которые могут находиться в различных абсолютных путях.
В вашем случае, когда вы создаете ссылку, набрав
ln -s foo ~/bin/foo_link
foo_link
просто содержит ссылку foo
, относительно его местоположения. Помещение $(pwd)
перед именем целевого аргумента просто добавляет абсолютный путь к текущему рабочему каталогу, так что ссылка создается с абсолютной целью.