У меня есть скрипт, который scp это файл с удаленного хоста обратно на локальный. Иногда имена файлов содержат пробелы. scp не любит пробелы в именах файлов. По некоторым причинам мои попытки обработки пробелов не привели к правильному пути scp.
Код:
PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop
Результаты в
Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg
Заключение PATH в кавычки "$PATH"
дает ту же ошибку.
Обмен пробелами на пробелы также не работает, хотя, насколько я могу судить, следует:
ESC_PATH=${PATH/' '/'\ '}
хотя печать экранированного пути показывает, что редактирование работало:
echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg
$PATH
для своих собственных переменных, потому что это нужно вашему терминалу.Ответы:
Вы должны указать как декларацию, так и использование
Если вы не цитируете первое,
$path
будет содержаться только первая часть. Если вы не заключите в кавычки второе,scp
каждая разделенная пробелами часть будет рассматриваться как аргумент.(Я изменил
$PATH
на,$path
потому что$PATH
это важная зарезервированная переменная, и вы не должны использовать ее для общих целей.)источник
Я пробовал что-то очень похожее с ssh и передавал через него командную строку. например
Я обнаружил, что простое определение «$ PATH» не сработало - оно все равно приводило к ошибкам. Однако если я побежал
Это сработало. Хитрость заключается в том, чтобы дополнительный набор «» передавался команде ssh из оболочки.
источник