Dor*_*oro 2 linux bash redirect stdout stderr
我已经阅读了如何单独记录某些脚本或命令,但没有介绍如何从BASH shell中记录所有命令.我想做的是:
一个不那么冗长/更具代码性的例子:
exec >>(tee logfile.log)当用户输入时完全符合我的要求.它将stdout记录到logfile.log,并将继续这样做,直到关闭bash shell.但是,将此命令作为脚本运行不会执行此操作.我想要它.
你不能在一个在它自己的shell下运行的脚本中执行此操作(即它以#!/bin/bash和你chmod +x一样调用它并像可执行文件一样调用它).重定向会影响子shell,但它无法到达父级以执行您想要的操作.你可以在shell中执行命令.的文件(如. ./myscript.sh),然后你可以根据需要重定向.
另一种方法是让你的脚本自己启动子shell(它将继承stdin,stdout,stderr).这就是script命令的作用.它会将所有内容记录到名为(默认情况下)的文件中,typescript直到用户退出子shell.