2013-01-16 3 views
3

Я пытаюсь передать аргументы локальному скрипту, который будет выполнен на удаленной машине. Скрипт отлично работает, поскольку я проверил его передачу переменных вручную. Я пытаюсь использовать plink для этого. Я беру имя пользователя (arg для передачи сценарию), и вам нужно отправить его вместе со скриптом через plink. Команда, я использую это:Передача аргументов из командной строки удаленной машине ubuntu

plink.exe [email protected] -m "myLocalScript.ksh" 

Я также попытался:

plink.exe [email protected] -m "myLocalScript.ksh %username%" 

plink.exe [email protected] -m %username% < "myLocalScript.ksh" 

Я попытался конвейером аргументов в, и добавлять их в разные места в команде и т.д. ли кто-нибудь знаете, как я могу это достичь?

Редактировать: Я использую это из cmd.exe, а не cygwin. Они -m опция выполняет следующие функции:

-m file read remote command(s) from file 
+0

или print - '$ {. Sh.version}', если выше не работает. Удачи. – shellter

+1

'plink.exe' и'% username% 'подразумевает, что вы используете CMD-линию Windows? Вы используете cgywin или cmd.exe? Ваше перенаправление на 'plink', скорее всего, завершится неудачно, если у вас действительно есть' myLocalScript.ksh ''как fileName (с завершающим« char »). Я предполагаю, что это опечатка? Рассмотрите возможность редактирования сообщения, чтобы напомнить нам, что делает аргумент '-m'. 'cmd.exe' sytnax обычно будет'/m', или у вас есть документ, который говорит, что его ОК используется '-m'. Кроме того, простейший возможный тестовый скрипт для тестирования этого, может быть, просто 'ls' внутри скрипта? Удачи. – shellter

+0

Привет Укрытие, я отредактировал вопрос, чтобы попытаться сделать его более ясным. – Cen92

ответ

1

Опция -m не имеет механизма для передачи атрибутов он просто буквально запускает файл как есть. Проблема заключается в том, что ваш корне сценарий оболочки не имеет интерпретатора в локальном конце, так что нет никакого механизма для этого в вашем конце окна но попробуйте это:

plink [email protected] "tr -d '\r'| ksh -s %username%" < myLocalScript.ksh 

еще лучше сделать основной вызов более читаемым:

call :remotecmd [email protected] myLocalScript.ksh %username% 


exit /B 
:remotecmd 
    setlocal 
    for /f "tokens=2,*" %%i in ("%*") do set options=%%j 
    plink %1 "tr -d '\r'| ksh -s %options%" < %2 
    endlocal 
exit /B 

Команда теперь обобщается для обработки любого количества дополнительных переключателей.

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