我正在寻找与此相反的观点: Trick an application into thinking its stdin is interactive, not a pipe
我想在stdout上获取命令的输出,但是让它认为它正在写入管道。
通常的解决方案是| cat
,但我还要求这是跨平台(即sh
,而不是bash
)并在命令失败时返回有效的退出代码。通常我会使用pipefail,但这并不是随处可见的。
我尝试了stty
的各种咒语,但没有成功。
答案 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)