从批处理终止交互程序

时间:2016-08-22 15:38:39

标签: linux bash shell command-line

我有一个交互式程序cmd,我从批处理脚本运行。我将输入插入:

cmd < $"yes\n3\nn\n"

此程序cmd是第三方软件,我不打算修改。

我需要在此字符串的末尾添加一些内容才能终止程序。事实是我还没有找到关闭这个程序的干净方法,到目前为止我一直用Control+C关闭它。如何在输入字符串的末尾插入它?

1 个答案:

答案 0 :(得分:0)

假设这确实是linux上的bash,我认为以下应该做你想做的事情:

cmd < $'yes\n3\nn\n\cD'

根据bash hackers wiki,在$''字符串中,展开转义序列,\cD是Control-D或文件结尾。正如评论者所说,对于一个表现良好的程序,你不应该需要明确的控制-D。实际上cmd是什么?也许它以奇特的方式操纵终端。如果是这样,另一个选项可能是使用kill手动将SIGINTSIGHUP发送到流程。类似的东西:

cmd < $'yes\n3\nn\n &
CMD_PID=$!
sleep 10    # or however long "cmd" usually takes
kill -s SIGINT "$CMD_PID"    # or SIGHUP or SIGQUIT instead of SIGINT