我有一个由其他人编写和编译的 Python 可执行文件,我只需要在自己的 bash 脚本中途运行一次即可。该程序使用基于文本的 UI,因此在继续之前会等待输入,但它在启动时执行的关键操作在我的 bash 脚本中是必需的。我知道这是一个混乱(且奇怪)的过程,但不幸的是我没有其他选择。
我已经设法用 kill 信号强制关闭程序,但程序的 TUI 坚持输出到运行的位置。我尝试将 stdout 和 stderr 重定向到 /dev/null,并通过在后面添加一个 & 符号在后台运行程序,但就是无法让它正常运行。我认为原因是程序生成了其他进程,而父进程的输出重定向不会影响它们。我可以使用什么技巧来重定向子进程的所有输出吗?
答案1
unbuffer
程序可能正在向 tty 而不是 stdout 写入数据。您可以使用expect
或使用其他技术expect
或类似技术。
以下是一个示例。创建此脚本并将其命名为“writetty”。然后执行以下操作chmod u+x writetty
:
#!/bin/bash
date > /dev/tty
现在尝试一下:
$ ./writetty
Tue Jun 8 12:24:36 CDT 2010
$ ./writetty > /dev/null
Tue Jun 8 12:24:46 CDT 2010
$ var=$(./writetty)
Tue Jun 8 12:24:56 CDT 2010
$ unbuffer ./writetty > /tmp/writetty.out
$ cat /tmp/writetty.out
Tue Jun 8 12:25:06 CDT 2010
$ var=$(unbuffer ./writetty)
$ echo $var
Tue Jun 8 12:25:16 CDT 2010
您可以用它expect
来响应程序的输入请求,而不是终止它。