2010-08-08 2 views
1

Код:

HOST=localhost 
PORT=1234 
RSYNCCMD="rsync -avP -e \"ssh -p $PORT\"" 

${(z)RSYNCCMD} [email protected]$HOST:"\"/foo\"" /bar 

Выход:

rsync: Failed to exec ssh -p 1234: No such file or directory (2) 
... 

Если я ввожу то же самое (rsync -avP -e "ssh -p 1234" ...) непосредственно в консоль, она работает.

Как исправить это?

+0

Пытаться определить функцию Echo: 'функция Echo () {для a в $ @; do echo -E - $ a; done} 'и заменить' rsync' на 'Echo'. Что он показывает? – ZyX

ответ

1

с помощью ${(Q)${(z)RSYNCCMD}} может работать для вас (вместо ${(z)RSYNCCMD})

(${(z)RSYNCCMD}, кажется, быть расширена до rsync -avP -e \"ssh\ -p\ 1234\", (Q) делает дополнительный unquoting магии)

+0

Какие у вас варианты? Это не происходит в моем случае. – ZyX

+1

Понял. Да, ваш ответ должен работать, но тема стартера также может рассмотреть возможность использования 'eval $ {(z) RSYNCCMD} ...'. – ZyX

+0

'eval' имеет другие проблемы, в основном, я должен процитировать все остальное. Но решение с '(Q)' отлично работает, спасибо. – Albert

Смежные вопросы