Проблема в сценарії з пробілами в імені файлу


11

У мене є сценарій, що 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

4
Будь ласка, не використовуйте $PATHдля власних змінних, тому що ваш термінал цього потребує.
Бернхард

Відповіді:


19

Вам слід вказати як декларацію, так і використання

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

Якщо ви не цитуєте першу, $pathбуде містити лише першу частину. Якщо ви не цитуєте другу, scpрозглянемо кожну розділену пробілом частину як аргумент.

(Я змінив $PATHдо $pathтому , що $PATHє важливим зарезервованим змінним , і ви не повинні використовувати його для загальних цілей.)


1
Ідеально! Дякую мільйон @Matteo. Виявляється, там також було встановлений простір, який також кидав у нього гайковий ключ.
Майлз Олден

1

Я намагався щось подібне з ssh і передав через нього командний рядок. напр

ssh <somehost> ls -l "$PATH"

Я виявив, що просто визначити "$ PATH" не зробило хитрощів - все-таки підкинуло помилки. Однак якщо я бігав

ssh <somehost> ls -l "\"$PATH"\"

Це спрацювало. Трюк полягає в тому, щоб забезпечити додатковий набір "" передається команді ssh з оболонки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.