如何记录 bash 命令及其输出?

如何记录 bash 命令及其输出?

我想要实际的命令行一起登录以及其输出

我经常执行这样的重要命令:

PERL5LIB=${PERL5LIB}:/something/extra my-command.pl many arguments which I want to save 2>&1 | tee -a my-command.log

现在my-command.log包含stdout和。然而,它stderr确实my-command.pl不是包含实际命令行多于。

我知道bash历史文件;所以,我想我可以手动从那里(或从终端)复制,但这当然不是一个好的解决方案。

我想我可以编写一个 shell 函数来接受命令行、回显它,然后执行它,但随后我必须处理引用地狱。

我尝试过set -v但似乎忽略了重定向。

script确实保存了命令行(但前提是我已经启动了一个新的 shell,而不是使用-c),但它确实不是在 emacs shell 交互缓冲区中工作,它也会将 shell 提示符(包括转义序列!)保存到其日志文件中,因此它不是最理想的。

答案1

尝试-xbash 的选项:

bash -x "PERL5LIB=${PERL5LIB}:/something/extra my-command.pl many arguments which I want to save" 2>&1 | tee -a my-command.log

我的测试:

$ bash -x -c "echo a bunch of difffernt arguments"
+ echo a bunch of difffernt arguments
a bunch of difffernt arguments

相关内容