Создание ссылки с помощью ln -s [дубликат ]

-1
17.08.2017, 14:32
2 ответа

Оболочка обычно разбивает

ln -s /Backup files/ /link 1

командную строку на следующие слова:

  • ln
  • -s
  • /Backup
  • files/
  • /link
  • 1

From первое слово, он выведет команду для выполнения (что-то вроде /bin/ln, найденное путем поиска во всех каталогах, перечисленных в переменной $PATH, файла с именем ln ) и передаст все эти слова как отдельные аргументы этому исполняемому файлу /bin/ln.

lnбудет понимать второй аргумент ( -s) как параметр, который означает создание символических ссылок вместо жестких ссылок, а затем остальные как ряд аргументов, не являющихся параметрами. Когда lnполучает более двух аргументов, не являющихся параметрами, последний понимается как каталог, в котором создаются символические ссылки на другие аргументы.

Итак, это просит lnсоздать 3 симлинка:

  • 1/Backup-> /Backup
  • 1/files-> files /
  • 1/ссылка-> /ссылка

Если каталог 1не существует или если это файл не типа каталог, он будет жаловаться.

Если вы хотите, чтобы lnсоздал символическую ссылку с именем /link 1, указывающую на /Backup files/¹, вам необходимо передать эти аргументы to ln:

  • ln
  • -s
  • /Backup files/
  • /link 1

В большинстве оболочек это можно сделать с помощью:

ln -s '/Backup files/' '/link 1'

] 'символов, как и символы пробела, являются частью синтаксиса оболочки. Здесь они привыкли говорить, что все, что находится внутри '...«следует трактовать буквально. В частности, символ пробелатеряет свое значение в качестве разделителя аргументов и вместо этого буквально включается в аргумент, передаваемый в ln. Некоторые реализации оболочки поддерживают больше заключенных в кавычкиоператоров, таких как "...", $'...', $"..."или обратную косую черту. В Korn-подобных оболочках, таких как bash, все они эквивалентны:

ln -s "/Backup files/" "/link 1"
ln -s $'Backup files/' $'/link 1'
ln -s Backup\ files/ /link\ 1

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

'ln' "-"'s' "Back"up\ files/ ''""/link' '$'1'

¹ Обратите внимание, что если ссылка 1существовала и была каталог типа (или символическая ссылка, которая в конечном итоге преобразуется в каталог), ln -s 'Резервные файлы/' '/ссылка 1'вместо этого фактически создаст символическую ссылку Резервные файлыв этом каталоге ( a /link 1/Backup files-> /Backup files/символическая ссылка . С GNU lnэтого можно избежать, используя параметр -T.

7
28.01.2020, 05:06

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

$ ln -s "/Backup files" "/link 1"
1
28.01.2020, 05:06

Теги

Похожие вопросы