在bash中,一旦fd被使用(无论是作为输入还是输出):
测试可以对变量进行重复,如下所示:
问题是:
在何种情况下,“自由”fd号的退出值“$rco$rci”会与11不同。
换句话说,它有时可能是10或01吗?
在其他shell中可能吗?
exec 7>AFile
似乎fd号码可能会重复,既可以作为输入,也可以作为输出:
true <&7; echo $?
true >&7; echo $?
测试可以对变量进行重复,如下所示:
fd=7
rco="$(true >&${fd} 2>/dev/null; echo $?)"
rci="$(true <&${fd} 2>/dev/null; echo $?)"
并将两个退出值合并为一个单词,如下所示:
[[ "$rco$rci" = "11" ]] && echo "The fd number $fd is free"
问题是:
在何种情况下,“自由”fd号的退出值“$rco$rci”会与11不同。
换句话说,它有时可能是10或01吗?
在其他shell中可能吗?
< /dev/null >&0 2>&0
。现在我知道只有在实际尝试写入时才会失败,而不是立即失败。所以true < /dev/null >&0
“有效”,但echo < /dev/null >&0
则不行。 - André Chalella<>
来实现这一点,例如echo <> /dev/null >&0
。如果您跟踪一个执行此操作的shell,您应该会看到<>
导致打开标志为O_RDWR
,而<
的标志是O_RDONLY
,>
的标志是O_WRONLY|O_TRUNC
。 - Petr Skocik