использование PLINK для отправки удаленной команды с одинарными и двойными кавычками - PullRequest
2 голосов
/ 24 апреля 2011

Я пытаюсь использовать plink на winXP для подключения к серверу linux и выполнения команды.Вот командная строка, которую я запускаю:

plink some_profile cd "$(echo 'T:\somedir\somesubdir with space in it\' | sed 's_\\_/_g' | sed 's_T:_/media/drive1_g')";unrar x 'somefile.rar'

Если я выполню часть этой команды (начнем с компакт-диска) непосредственно в окне Linux, она будет работать отлично.Но когда я запускаю его через plink, происходит сбой со следующей ошибкой:

bash: line 0: cd: /media/drive1/somedir/somesubdir: No such file or directory

Я думаю, что не правильно цитирую команду при прохождении через plink, поэтому она не передает кавычкинеобходимо обрабатывать пробелы в каталогах.Любые идеи о том, как это должно быть процитировано, чтобы это работало?

Если вам интересно, почему я вообще это делаю, это в основном скрипт, который я запускаю в Directory Opus, где я могу удалить файлЯ в настоящее время выделил (гора самбы).Каталог и имя файла передаются в сценарий, который удалит файл из моего удаленного окна.

Спасибо!

РЕДАКТИРОВАТЬ: Проблема решена благодаря ответу Микеля.Вот линия, которая работает сейчас, если кто-то еще столкнется с этим позже ...

plink some_profile cd \"$(echo 'T:\somedir\somesubdir with space in it\' | sed 's_\\_/_g' | sed 's_T:_/media/drive1_g')\";unrar x 'somefile.rar'

1 Ответ

2 голосов
/ 25 апреля 2011

Вам нужно добавить еще один уровень кавычек, например,

plink some_profile cd "\"$(echo 'T:\somedir\somesubdir with space in it\' | sed 's_\\_/_g' | sed 's_T:_/media/drive1_g')\"";unrar x 'somefile.rar'

Это потому, что вам нужен один уровень кавычек на стороне Windows и один уровень кавычек на стороне Linux.

...