exec
没有参数返回成功并且显然什么也不做。为什么?
答案1
道路Bash 的手册是这么说的,语法exec
是
exec [-cl] [-a name] [command [arguments]]
和
如果命令提供后,它会替换 shell,而不创建新进程。
但,
如果不命令指定后,重定向可用于影响当前 shell 环境。
因此,exec
如果命令行上没有任何其他内容,则没有要运行的命令,也没有要应用的重定向,因此无需执行任何操作。
但是 egexec >> output.txt
也没有实际的参数exec
,但是它仍然将重定向应用于 shell。
这与 Zsh 和 POSIX 功能类似,尽管 POSIX 文本有点难以阅读。
答案2
将这些行放在 shell 顶部附近将捕获脚本中未进一步重定向的输出。
LOG=bash.out.txt
exec >"$LOG" 2>&1
echo "captured into $LOG"
echo "not captured into $LOG" > otherfile.txt