Я склоняюсь к префиксу часто используемых файлов и папок с символом «accent grave» (тильда без сдвига, обратная галочка или простой старый акцент, что вы скажете ...), так как это легко понять, и давайте мне сортировать вещи в алфавитном порядке, разрешая мне показывать несколько элементов сверху. Это работает хорошо, за исключением случаев, когда я обращаюсь к этим файлам через CLI или SSH / SCP.
Если я пытаюсь запустить команду, вызывая файл без экранирования, он попадает в интерактивный сеанс .. например,
# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
↩
>
Тем не менее, если я попробую логическое решение ↯
# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/
↩
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
Я знаю, что «новым» правилом является использование синтаксиса, такого как export NOW=$(date)
vs export NOW=
`date` (на самом деле, у меня было время, когда я даже писал последний в синтаксисе SE MD ...), но это не связано ENV
ни со сценарием, ни с любым другим. ..
Примечание: Это является среда Mac OS X, но сказал, графический интерфейс никогда не имел проблем дело с этим персонажем на основе изо дня в день, и , как правило, если будет проблема синтаксиса в терминале, Apple делает довольно хорошую работу по отключению поведения в графическом интерфейсе ... Не уверен, если это ошибка, или если метод для работы с такими путями просто неясен ... но до сих пор я не смог найти способ "избежать этого" ?
Ответы:
Вы можете использовать 3 обратных слеша, как упомянуто Джедом Дэниелсом, или вы можете заключить их в одинарные кавычки
(')
и использовать один обратный слеш.Пример обоих приведен ниже.
источник
Три обратных слеша должны сделать это:
Первая обратная косая черта выходит за пределы обратной черты, поэтому она отправляется на другую сторону, но другая сторона выдает ошибку, поскольку ожидает, что обратные помехи будут в парах. Вторая обратная косая черта экранирует первую обратную косую черту, затем вам понадобятся две дополнительные обратные косые черты, чтобы вы могли отправить экранированный обратный слеш на другую сторону.
РЕДАКТИРОВАТЬ: Как упоминает Рик, вы также можете сделать это с помощью одной цитаты. Я не думал об этом, потому что вы не можете использовать его с переменными (они не будут расширяться в локальной системе, когда в одинарных кавычках).
источник
Обычно командные строки интерпретируются оболочкой один раз. Однако по историческим причинам scp передает имя файла также в удаленную оболочку, поэтому имя файла интерпретируется оболочками дважды . Это также то, что заставляет вещи
scp remote:'/path/prefix*' /path/local/
работать, удаленная оболочка расширяется/path/prefix*
.Самый простой способ избежать второго расширения - использовать sftp, который не использует удаленную оболочку. Он все еще выполняет расширение glob, но, поскольку вы можете давать ему команды на stdin, вы можете полностью избежать локального расширения оболочки.
Кроме этого, вы можете использовать любой из обычных механизмов цитирования оболочки, в том числе те, которые были предоставлены @Jed Daniels и @Rik Schneider, но я хотел объяснить, что на самом деле происходит, и упомянуть sftp.
(Вы можете использовать все виды функций оболочки в вашем имени файла scp, например,
scp server:\$HOME/file dest
будете использовать идею удаленной оболочки$HOME
, тогда как, если вы удалите ее\
, она будет использовать вашу локальную оболочку.).источник