我想知道我們如何爲命令提示提供哪些輸入來更改。我想用shell腳本輸入到shell腳本中的專有命令提示符
例子,其中「#」是常用的提示和「>」是一個提示,具體到我的程序:
mypc:/home/usr1#
mypc:/home/usr1# myprogram
myprompt> command1
response1
myprompt> command2
response2
myprompt> exit
mypc:/home/usr1#
mypc:/home/usr1#
我想知道我們如何爲命令提示提供哪些輸入來更改。我想用shell腳本輸入到shell腳本中的專有命令提示符
例子,其中「#」是常用的提示和「>」是一個提示,具體到我的程序:
mypc:/home/usr1#
mypc:/home/usr1# myprogram
myprompt> command1
response1
myprompt> command2
response2
myprompt> exit
mypc:/home/usr1#
mypc:/home/usr1#
如果我理解正確的,你想將特定命令發送到您的程序myprogram
。
爲了達到這個目的,您可以使用簡單的expect
腳本。我將承擔myprogram
提示與myprompt>
注意到,那myprompt>
符號沒有出現在response1
:
#!/usr/bin/expect -f
#this is the process we monitor
spawn ./myprogram
#we wait until 'myprompt>' is displayed on screen
expect "myprompt>" {
#when this appears, we send the following input (\r is the ENTER key press)
send "command1\r"
}
#we wait until the 1st command is executed and 'myprompt>' is displayed again
expect "myprompt>" {
#same steps as before
send "command2\r"
}
#if we want to manually interract with our program, uncomment the following line.
#otherwise, the program will terminate once 'command2' is executed
#interact
要啓動,只需調用myscript.expect
如果腳本是在同一文件夾中myprogram
。
謝謝!我的linux風格沒有'expect'。看起來像我必須自己構建包... – Aadishri
鑑於myprogram
是一個腳本,它必須提示輸入類似while read IT; do ...something with $IT ...;done
的內容。很難說如何在沒有看到它的情況下改變該腳本。 echo -n 'myprompt>
將是最簡單的加法。
myprogram是'C'可執行文件 – Aadishri
可以PS3
和select
完成構建
#!/bin/bash
PS3='myprompt> '
select cmd in command1 command2
do
case $REPLY in
command1)
echo response1
;;
command2)
echo response2
;;
exit)
break
;;
esac
done
或用echo
和read
建宏
prompt='myprompt> '
while [[ $cmd != exit ]]; do
echo -n "$prompt"
read cmd
echo ${cmd/#command/response}
done
我想通過shell腳本執行'myprogram' – Aadishri
對不起,你的問題是問路,我不能完全理解。你想自動將'command1'和'command2'傳遞給'myprogram'嗎?你可以發佈你的預期輸入/輸出嗎? – Aserre
是的,'myprogram'是一個'C'可執行文件,它會產生一個新的提示'myprompt>'。我必須在這個新的提示中發送一些命令,比如寫xxx。我得到一個'寫入xxx'的響應,myprompt返回,直到我輸入退出。在此之後,我退出了我的計劃並回到我平時的'#'提示 – Aadishri