Створіть абсолютне символічне посилання на поточний каталог


12

Зараз я перебуваю під каталогом з дуже довгим шляхом. Для подальшого відвідування його я хотів би створити посилання на нього.

я намагався

ln -s . ~/mylink

~/mylinkнасправді посилання на ~. Тож чи можу я розгорнутись ~на розгалужену назву шляху, а потім надати її ln?

Відповіді:


19

Символьне посилання насправді зберігає шлях, який ви надаєте буквально, як рядок¹. Це означає, що ваше посилання ~/mylinkмістить " ." (один символ). Коли ви отримуєте доступ до посилання, цей шлях інтерпретується відносно того, де знаходиться посилання, а не там, де ви були, коли ви робили посилання.

Натомість ви можете зберігати фактичний шлях, який ви хочете, за посиланням:

ln -s "$(pwd)" ~/mylink

використовуючи підстановку команд, щоб помістити висновок pwd(ім'я робочого каталогу) у ваш командний рядок. lnбачить повний шлях і зберігає його у вашому символьному посиланні, яке потім вкаже на потрібне місце.

¹ Більш-менш.


2
Дивіться також "$PWD"в оболонках POSIX та ~0в zsh.
Стефан Шазелас

7

Ви повинні використовувати:

ln -s "$(cd . && pwd)" ~/mylink

або:

ln -s "$(pwd -P)" ~/mylink

щоб отримати правильний результат для поточного робочого каталогу. Це можна змінити під час роботи над ним, як у цьому питанні .


1
Перший не обов’язково допоможе у всіх оболонках (див. Цю відповідь ). ОП, швидше за все, хоче скористатися $PWD(шлях, яким він туди потрапляв), а не $(pwd -P)(канонічний шлях до поточного каталогу). Якщо $PWDбільше не вказує на поточний каталог, то вже не буде сказано, що $(pwd -P)в наступній хвилині.
Стефан Шазелас

@ StéphaneChazelas: Дивіться це unix.stackexchange.com/questions/147693/…
cuonglm

@ StéphaneChazelas: Ви можете переглянути "$PWD"старе значення, якщо буде переміщено поточний каталог. PWDвстановлюється лише тоді, коли ви cdабо ініціалізуєте оболонку.
cuonglm

Але те, що я говорю, це те, що ОП, швидше за все, захоче старого $ PWD, ніж якийсь абсолютний шлях до поточного робочого каталогу, і що в декількох оболонках (ksh93, ash, yash), як пояснено там, виклик cdне гарантується. $ PWD або вихід pwd шлях до поточного каталогу. Ви намагаєтесь вберегтися від чогось, що, швидше за все, не станеться, але в першому рішенні це не обов'язково ефективно, а в другому - це змінює поведінку.
Стефан Шазелас

1
Якщо хтось робить mv після вас ln, то ви опинитесь в тій самій ситуації. З іншого боку, якщо він це зробив cd /long/logical/path/to/some/directory, ви не хочете, щоб посилання вказувало на /vg0/lv1/user2/app4(канонічний шлях), оскільки посилання вказуватиме на неправильне місце, коли /long/logical/path/to/some/directoryвказує на інше місце.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.