在 posix sh 中,是否可以确定文件描述符是否打开?
我为用户提供的扩展名的脚本提供了一个可选的输入文件描述符,读取将立即失败,并显示EBADF
.
#!/bin/sh
database_initialize()
{
echo "create database bob;"
# TODO check if open
# Input file descriptor 3 is used to send to bootstrap
cat <&3
}
database_initialize | mysqld --bootstrap
我想避免 Linux 特定的事情,比如[ -s /proc/self/fd/3 ]
答案1
fd_is_open() (: >&"$1") 2>/dev/null;
if fd_is_open 7; then
...
fi
这会给 fd 2 带来误报,因为我们必须打开它才能消除错误消息。