当我们在 Linux 中运行 .sh 文件时,如何查看后台发生了什么?

当我们在 Linux 中运行 .sh 文件时,如何查看后台发生了什么?

我知道一种方法,即./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)。

相关内容