Оболочка обычно разбивает
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
.
В именах файлов отсутствуют двойные кавычки. Так как они содержат пробелы, их нужно заключать в кавычки:
$ ln -s "/Backup files" "/link 1"