【发布时间】:2015-09-08 03:22:27
【问题描述】:
我写了一个期望脚本,帮助在远程机器上执行命令。执行完成后,我想获取一行用户输入,然后发送到远程bash,这里是sn -p的代码:
#! /usr/bin/env expect
...
spawn ssh -l $user $host
...
send_tty -- "Enter your command: "
set timeout -1
# match only printable characters (prevent from pressing TAB)
expect_tty eof exit -re {([[:print:]]*)\n}
send_tty -- "\n"
set timeout 10
# send the command to remote shell
send "$expect_out(1,string)"
expect "$GENERAL_PROMPT"
但是,如果输入类似于:ls /",我的程序将被阻止,因为远程 shell 期望通过提示字符串“>”来获取更多字符。实际上,我希望 bash 不会提示输入更多信息,而不仅仅是打印错误消息:
$ read COMMAND
ls /"
$ eval "$COMMAND"
bash: unexpected EOF while looking for matching `"'
bash: syntax error: unexpected end of file
我可以在我的脚本中实现这一点吗?
【问题讨论】:
-
@ zhujs :我不是 bash 专家,但是,当我尝试使用
ls /"作为输入和eval $COMMAND执行read COMMAND时,我在终端中得到了上述错误。如果输入没有双引号,即ls /,那么它工作正常。 -
我只想让我的脚本在用户输入
ls /"时打印出同样的错误 -
使用
eval,就像你尝试过的一样。 -
使用多提示。
set multiPrompt {[>\"] } -
@whjm 我试过这个命令:
send "eval $expect_out(1,string)",但我的程序还是被阻塞了