我正试图做相反的事情
我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.
我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.
有什么想法吗?
我在Linux中有一个程序,如果它的stdin/stdout不是TTY(终端设备),它就拒绝运行.是否有一个易于使用的工具,它将创建一个PTY,使用新创建的TTY启动程序,并通过stdin/stdout复制所有数据?
用例不是交互式的,而是脚本的.我正在寻找最轻量级的解决方案,最好不要创建TCP连接,也不需要安装太多其他工具和库.
我有一个必须定期运行的脚本(我无法修改),该脚本具有以下结构:
read -r response < /dev/tty
if [ "$response" = 'y' ]; then
...
Run Code Online (Sandbox Code Playgroud)
我想包装这个脚本,以便我总是向它发送一个“y”字符。我尝试使用发送“是”的标准技巧运行脚本:
echo y | '/bin/bash /path/to/script'
Run Code Online (Sandbox Code Playgroud)
和
yes | ./myscript
Run Code Online (Sandbox Code Playgroud)
和
printf "y\n" | ./myscript
Run Code Online (Sandbox Code Playgroud)
和
/bin/bash /path/to/script < /path/to/y-file
Run Code Online (Sandbox Code Playgroud)
这些都不起作用。我也尝试过expect。
目前尚不清楚 Mac OS X 的内置 Expect 是否正常工作;启用 Expect 诊断信息后,Expect 会正确检测提示并做出响应,但脚本随后终止。
#!/bin/bash
set timeout -1
SCRIPT="~/myscript"
expect -d <<EOF
spawn $SCRIPT
expect "prompt string"
send "y\r"
EOF
Run Code Online (Sandbox Code Playgroud)
另外,需要澄清的是,这是在 Mac OS X Monterey 上进行的。
我将不胜感激任何帮助。再说一遍,我无法修改原始脚本。