Я сейчас в каталоге с очень длинным путем. Чтобы в будущем посетить его быстрее, я бы хотел создать ссылку на него.
Я старался
ln -s . ~/mylink
~/mylink
на самом деле ссылки на ~
. Итак, могу ли я перейти ~
к полному пути, а затем дать его ln
?
Символическая ссылка на самом деле хранит путь, который вы даете буквально, в виде строки¹. Это означает, что ваша ссылка ~/mylink
содержит " .
" (один символ). Когда вы получаете доступ к ссылке, этот путь интерпретируется относительно того, где находится ссылка, а не там, где вы были, когда создавали ссылку.
Вместо этого вы можете сохранить фактический путь, который вы хотите в ссылке:
ln -s "$(pwd)" ~/mylink
используя подстановку команд, чтобы поместить вывод pwd
(имя рабочего каталога) в вашу командную строку. ln
видит полный путь и сохраняет его в вашей символической ссылке, которая затем будет указывать на правильное место.
Or более или менее.
"$PWD"
в оболочках POSIX и~0
вzsh
.Вы должны использовать:
или:
чтобы получить правильный результат для текущего рабочего каталога. Это может быть изменено, пока вы работаете в этом, как в этом вопросе .
источник
$PWD
(путь, который он там использовал), а не$(pwd -P)
(канонический путь к текущему каталогу). Если$PWD
больше не указывает на текущий каталог, то нет слов, что$(pwd -P)
будет в следующую минуту."$PWD"
все еще имеете старое значение, если текущая директория перемещена.PWD
устанавливается только когда выcd
или инициализируете с помощью оболочки.cd
не гарантирует выполнения $ PWD или вывод pwd - путь к текущему каталогу. Вы пытаетесь защититься от чего-то, что вряд ли произойдет, но в первом решении это не обязательно эффективно, а во втором - изменение поведения.mv
после васln
, то вы попадаете в ту же ситуацию. С другой стороны, если он это сделалcd /long/logical/path/to/some/directory
, вы не хотите, чтобы ссылка указывала на/vg0/lv1/user2/app4
(канонический путь), поскольку ссылка будет указывать на неправильное место, когда оно/long/logical/path/to/some/directory
указывает куда-то еще.