2012-06-01 2 views
3

Существует интерактивная консоль оболочки, я могу войти в нее, запустить определенный набор команд внутри консоли и выйти из нее.Избегайте интерактивного режима в сценарии оболочки

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

Я пытаюсь что-то вроде, скажем, блабла оболочка интерактивной консоли здесь, это всегда приводит меня в интерактивном режиме :(

/usr/bin/blabla shell << EOF 
do A, 
do B, 
do C 
quit 
EOF 

У меня есть длинный/конкретная версия этого вопроса можно найти здесь -> Configure flume in shell/bash script - avoid interactive flume shell console

ответ

1

Закрытие stdin следует сделать трюк:

exec <&- 
+0

спасибо за ответ, в моем случае, это должно быть/USR/бен/блаб оболочку <& - << EOF? – Shengjie

+2

В соответствии с [документацией] (http://archive.cloudera.com/cdh/3/flume/UserGuide/#_using_the_flume_command_shell) вы можете передавать команды в оболочку через 'echo 'connect localhost: 35873 \ ngetconfigs \ nquit" | flume shell -q' – Stefan

+1

Если вы закрываете 'stdin', может ли оболочка читать здесь-doc? –

0

Вы можете попробовать положить команды, которые вы бы ввод в интерактивном режиме в файл, а затем выполнить команду, как:

command < file 
1

The expect команды, если ваш друг. Он может эмулировать интерактивную связь с другими командами даже очень сложным способом.

От man expect:

Ожидать это программа, которая «говорит» с другими интерактивными программами по сценарию.

0

Может быть Secure SHell, ssh делает то, что вам нужно. Для этого требуется, чтобы «удаленный» компьютер был настроен как сервер SSH. Я использую его регулярно выполнять команды на других хостах, такие как

ssh [email protected] command 
Смежные вопросы