Kel*_*vin 10 bash file-descriptor io-redirection
我正在尝试使用bash打开一个新的描述符来编写额外的诊断消息.我不想使用stderr,因为stderr应该只包含bash调用的程序的输出.我还希望我的自定义描述符可由用户重定向.
我试过这个:
exec 3>/dev/tty
echo foo1
echo foo2 >&2
echo foo3 >&3
Run Code Online (Sandbox Code Playgroud)
但是当我尝试重定向fd 3时,输出仍然写入终端.
$ ./test.sh >/dev/null 2>/dev/null 3>/dev/null
foo3
Run Code Online (Sandbox Code Playgroud)
首先,父shell将文件描述符3设置为/ dev/null
然后您的程序将文件描述符3设置为/ dev/tty
所以您的症状并不令人惊讶.
编辑:您可以检查是否已设置fd 3:
if [[ ! -e /proc/$$/fd/3 ]]
then
exec 3>/dev/tty
fi
Run Code Online (Sandbox Code Playgroud)
小智 5
足够简单:如果父shell 没有重定向fd 3,那么test.sh将fd 3重定向到/dev/tty.
if ! { exec 0>&3; } 1>/dev/null 2>&1; then
exec 3>/dev/tty
fi
echo foo1
echo foo2 >&2
echo foo3 >&3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7262 次 |
| 最近记录: |