2015-10-07 6 views
1

Я делаю передачу файлов с помощью rsync с сервера, где у файлов/каталогов есть пространство в их имени. Использование апострофа, я убегаю пространство, и это работаетbash: rsync escape single quote

rsync -svaz --progress '[email protected]:/folder with space' '/downloads'

Я пытаюсь написать Баш скрипт для таких же, но без успеха, согласно this нити, можно избежать одного котировки помести его под двойная кавычка. Следующие выглядит хорошо

#!/bin/bash  
read -e -p "source path: " SOURCEPATH 
read -e -p "destination path: " DESPATH 
echo "rsync -svaz --progress" "'""$SOURCEPATH""'" "'""$DESPATH""'" 

Но это не работает

#!/bin/bash 
read -e -p "source path: " SOURCEPATH 
read -e -p "destination path: " DESPATH 
rsync -svaz --progress "'""$SOURCEPATH""'" "'""$DESPATH""'" 
+1

Одиночные кавычки в этой исходной командной строке просто цитируют пробелы. Двойные кавычки вокруг переменных разложений делают то же самое. Вам не нужны оба. Просто забудьте одинарные кавычки. (Также, чтобы получить то, что вы пытались, вам просто нужно было «$ SOURCEPATH» «' 'не' ''" "$ SOURCEPATH" "'" 'i.e, нет необходимости вбрасывать и выходить из двойных кавычек, подобных этому.) –

ответ

1

Для ускользания пространства в bash вам необходимо использовать \ его обратную косую черту, а затем пробел.

Если вы читаете ввод от другого источника, тогда просто будет помещаться цитата (однократная или двойная).

rsync -svaz --progress "$SOURCEPATH" "$DESPATH" 

Примечание: Если вы уже используете escape-символ для пробела при чтении ввода, вы должны использовать двойные кавычки.

0

Вы overquoting. Просто цитирую расширение параметра гарантирует, что точное значение, пробелы и все, передаются в качестве единственного аргумента в rsync:

rsync -svaz --progress "$SOURCEPATH" "$DESPATH" 

Одиночные кавычки в исходном примере не передаются rsync; они удаляются оболочкой перед передачей закрытой строки в качестве аргумента в rsync.