相关疑难解决方法(0)

欺骗应用程序认为它的标准输出是一个终端,而不是管道

我正试图做相反的事情

检测stdin是终端还是管道?

我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.

我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.

有什么想法吗?

bash terminal stdin pipe

137
推荐指数
7
解决办法
5万
查看次数

将数据管道到需要TTY(终端)的Linux程序

我在Linux中有一个程序,如果它的stdin/stdout不是TTY(终端设备),它就拒绝运行.是否有一个易于使用的工具,它将创建一个PTY,使用新创建的TTY启动程序,并通过stdin/stdout复制所有数据?

用例不是交互式的,而是脚本的.我正在寻找最轻量级的解决方案,最好不要创建TCP连接,也不需要安装太多其他工具和库.

linux terminal pipe tty pty

20
推荐指数
1
解决办法
5860
查看次数

如何自动化从 /dev/tty '读取'的 bash 脚本?

我有一个必须定期运行的脚本(我无法修改),该脚本具有以下结构:

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 上进行的。

我将不胜感激任何帮助。再说一遍,我无法修改原始脚本。

bash input

6
推荐指数
1
解决办法
2211
查看次数

标签 统计

bash ×2

pipe ×2

terminal ×2

input ×1

linux ×1

pty ×1

stdin ×1

tty ×1