![如何记录 bash 命令及其输出?](https://linux22.com/image/1361016/%E5%A6%82%E4%BD%95%E8%AE%B0%E5%BD%95%20bash%20%E5%91%BD%E4%BB%A4%E5%8F%8A%E5%85%B6%E8%BE%93%E5%87%BA%EF%BC%9F.png)
我想要实际的命令行是一起登录以及其输出。
我经常执行这样的重要命令:
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
尝试-x
bash 的选项:
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