我正在学习bash,我认为有一个包含所有我在文件中所做的事情的日志会很好(比如script
命令)。但是我不想使用script
,我想创建自己的bash脚本。所以我写了这个:
rm file; tee -a file | bash 2>&1 | tee -a file
字符串
它工作得很好,但我想记录bash默认提示也。我在man bash
中找到了-i
选项,并更改了脚本(我必须在这里使用rm
和tee -a
命令,而不是仅使用tee
,因为它创建了一个奇怪的移位输出。所以我选择了简单的方法):
rm file; tee -a file | bash -i 2>&1 | tee -a file
型
但它不工作!它只执行并保存一个命令。有没有办法解决它(并了解它的原因)?cat file
在第一个脚本之后的输出示例:
echo 1
1
echo 2
2
型
所需输出:
user@host:~$ echo 1
1
user@host:~$ echo 2
2
型
1条答案
按热度按时间toiithl61#
我选择了简单的方法:
字符串
但它不工作!它只执行并保存一个命令。
您确实需要在交互模式下运行
bash
以获得提示,并且当其标准输出未连接到终端时,您需要显式地请求(通过-i
)。您遇到了麻烦,因为子
bash
的行为就像它在前台一样,因为它处于交互模式,但它实际上并没有连接到控制终端--两个tee
命令是。当子bash
执行命令时,它将该命令置于前台,但当命令终止时,子bash
无法将至少一个tee
返回到前台。但无论如何那个命令不是你想要的。在交互模式下运行时,
bash
将其输入回显到其输出,这就是为什么您会看到您键入的内容。但这意味着您的命令捕获输入两次,一次是在它到达bash
之前,另一次是在bash
回显它之后。您不需要第一个tee
,并且删除它还允许一些其他简化:型
事实证明,这对我来说完全像你想要的那样。它记录任意数量的命令,并带有提示和输出。