欺骗应用程序认为它是一个管道,而不是交互式

时间:2016-11-15 17:21:47

标签: shell

我正在寻找与此相反的观点: Trick an application into thinking its stdin is interactive, not a pipe

我想在stdout上获取命令的输出,但是让它认为它正在写入管道。

通常的解决方案是| cat,但我还要求这是跨平台(即sh,而不是bash)并在命令失败时返回有效的退出代码。通常我会使用pipefail,但这并不是随处可见的。

我尝试了stty的各种咒语,但没有成功。

1 个答案:

答案 0 :(得分:1)

您始终可以使用命名管道:

mkfifo tmp.pipe

# Reader runs in background
cat tmp.pipe &

# Producer in foreground
your_command > tmp.pipe
command_rtn=$?

rm tmp.pipe

或者,如果您不需要实时输出并且输出相当小:

output=$(your_command)
command_rtn=$?
echo "${output}"

或者您可以将退出状态写入文件,执行以下操作:

{ your_command; echo $? > rtn_file; } | cat
command_rtn=$(cat rtn_file)