我有一个行为不当的程序,需要从脚本中调用它。它一看到 stdin 上有东西就会退出。有没有办法关闭 stdin?
答案1
答案2
找到了,你可以使用以下命令关闭 stdin:
exec 0<&-
答案3
只需通过管道输入一个没有输出的程序:
: | misbehaving_program
答案4
我发现自己也遇到了同样的问题。我的解决方案源自此处的建议,但不同之处在于,不是使用 whichstdin
来关闭exec 0<&-
,而是允许子 shell 继续使用 stdin。您期望退出但实际上没有退出的示例程序如下所示:
exec 0<&-
$(read stdin)
这是因为read
是在继承自父级的子 shell 中生成的stdin
。如果我们重定向,stdin
我们就会得到预期的行为
exec 0</dev/null
$(read stdin)
这将产生退出代码 1。