我知道一种方法,即./filename.sh > log.txt
。但是,如果我们使用 运行该文件,该日志文件包含控制台中显示的内容./filename.sh
。
后台进程未出现在日志文件中。我所说的“后台进程”是指编译器如何评估每一行(我猜“调试”这个词很适合)。
如何将该后台进程放入日志文件中?
答案1
根据您的评论:
我的意思是我想知道运行 .sh 文件时 bash 如何执行每一行 shell 脚本。
如果您使用的是 bash,那么您要寻找的是:
bash -x ./filename.sh
或者
bash -x ./filename.sh > log.txt
或者您可以添加:
set -x
的内容filename.sh
。
答案2
在脚本顶部(Shebang 之后)添加以下行:
exec >/path/to/log.txt
将脚本的 STDOUT 重定向到/path/to/log.txt
.
如果您想同时重定向 STDOUT 和 STDERR:
exec >/path/to/log.txt 2>&1
或者只是 STDERR:
exec 2>/path/to/log.txt
现在,无论脚本位于前台还是后台,日志文件都将具有 STDOUT(和/或 STDERR)。