我看到一个包含exec 1>&2
命令的Bash脚本函数,类似于:
function example()
{
exec 1>&2
cat <<EOT
Script requires at least one parameter.
EOT
exit 1
}
据我理解,exec 1>&2
表示从此处开始的所有内容都将被重定向到stderr。这是一种固定的exec行为,需要熟记,还是有一些合理的解释?我的意思是,Bash脚本中的exec只是调用一个command,该command具有与Bash脚本相同的PID,一旦command完成,PID就会被终止。1>&2并不是一个命令。能否有人解释一下exec 1>&2
命令背后的细节(特别是为什么问题)?
echo "Script requires at least one parameter" 1>&2
。此外,错误消息并不是很有帮助;你必须猜测那个参数是什么。更好的消息应该是:echo "Usage: $(basename $0 .sh) filename [...]" 1>&2"
,以告诉你(提醒你)正确的用法和需要提供的内容。而使用四行来完成一个任务有点过头了。如果有许多行要“echo”,那么重定向就更有意义了,但仍可以使用cat 1>&2 <<EOT
,然后是“here document”。 - Jonathan Lefflerexec 1>&2
有点邪恶,因为这个副作用会在函数返回后继续存在。(诚然,这个函数调用了exit 1
,但这种惯用法甚至不应该存在。) - ruakh