首先stdin是文件描述符0(零)而不是1(stdout)。
您可以复制文件描述符或有条件地使用文件名,如下所示:
[[ some_condition ]] && exec 3<"$filename" || exec 3<&0some_long_command_line <&3
请注意,
exec如果条件为假 或 第一个
exec失败,则所示命令将执行第二个命令。如果您不希望这样做失败,则应使用
if/
else:
if [[ some_condition ]]then exec 3<"$filename"else exec 3<&0fi
但是如果第一次重定向失败(在条件为真之后),则随后从文件描述符3进行的重定向将失败。



