символическая ссылка без расширения $ HOME или "~"? - PullRequest
8 голосов
/ 27 октября 2011

Основная идея заключается в том, что я хочу связать путь с относящимся к $ HOME путем, а не явно расширять переменную $ HOME, поскольку я хочу убедиться, что ссылка работает на нескольких машинах, например,

когда я делаю

ln -s ~/data datalnk

Я хочу, чтобы он был направлен в каталог /home/user/data на одной машине с пользователем $HOME, равным /home/user, и на /home/machine/user/data на другой машине с пользователем $HOME, равным /home/machine/user/data.

Я не могу создать символическую ссылку на втором компьютере, используя

ln -s /home/machine/user /home/user

потому что у меня нет разрешения на это, и я не могу link относительные пути, поскольку две машины имеют разные иерархии каталогов.

Есть ли какие-либо возможные способы исправить или обойти это?

EDIT:

что я на самом деле пытаюсь сделать, это заставить одну и ту же ссылку работать на двух машинах, где цели имеют одинаковые каталоги с точки зрения их относительного пути только к $ / HOME, а не их абсолютного пути и не относительного пути на ссылку тоже.

Ответы [ 3 ]

7 голосов
/ 27 октября 2011

тл, др не получится

Вы можете использовать экранирующий механизм, такой как одинарные кавычки, чтобы получить ~ в символическую ссылку:

> cd ~
> echo hello > a    
> ln -s '~/a' b

Однако ~ является расширением оболочки и не понимается файловой системой (на самом деле, для файловой системы это «просто еще один символ»). Это хорошо - хотите, чтобы уровень файловой системы знал о переменных среды, так как ~ обычно определяется $HOME?

> ls -l b
lrwxrwxrwx    1 root     root             3 Oct 27 17:39 b -> ~/a
> ls b
ls: b: No such file or directory 

Вы могли бы по-прежнему "вручную" просматривать указанные записи символических ссылок (как это делается с ls -l), но это должно было бы быть сделано непрозрачным способом программой (подумайте ".LNK" в Windows). Как видно, файловая система просто не понимает ~.

Happy sh'ing.

1 голос
/ 27 октября 2011

Прежде всего: это нельзя сделать напрямую.Символические ссылки - это текстовые файлы, расширения не выполняются.Если вы не можете сформулировать фиксированный относительный или абсолютный путь к месту, на которое вы ссылаетесь, вы не можете символически связать его с ним.

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

1 голос
/ 27 октября 2011

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

Например:

cd
ln -s data datalnk

Во время выполнения ваше приложение или скрипт должны будут ссылаться на ~/datalnk или $HOME/datalnk.

Вы на самом деле не сказали, чего пытаетесь достичь, поэтому я не могу точно сказать, решаю ли я вашу проблему или предлагаю вам пойти по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...