Самый простой способ связать текущий каталог как абсолютный путь, не набирая всю строку пути, был бы
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)
перед именем целевого аргумента просто добавляет абсолютный путь к текущему рабочему каталогу, так что ссылка создается с абсолютной целью.
source_file
(Первый) аргумент где ссылка указует, что дословно то , что вы входите в команде.target_file
(Второй) аргумент становится именем ссылки , если то , что вы вводите не является каталогом, и в этом случае имя ссылки совпадает с базовым именем ,source_file
но помещены в каталогеtarget_file
.ln
страница руководства,target
является первым аргументом (где ссылка указывает на ) , тогда как второй аргумент просто упоминается какlink
(source
не упоминается).target
и второйlink
( man7.org/linux/man-pages/man1/ln.1.html ). Но в BSD (включая OS X) первый называется,source
а второйtarget
( freebsd.org/cgi/man.cgi?ln ). Весьма запутанно.Использование флага
-r
(--relative
) сделает эту работу:источник
-r
это GNUism, т.е. не POSIX, поэтому не будет работать в случае OP, так как стандартнаяln
команда OS X основана на BSD.Чтобы сохранить набор текста, вы можете сделать
источник
*
,?
и[...]
).bash
, так что это хорошая идея - процитировать его. Мой плохой, я должен был быть более конкретным.Как насчет:
источник