我有一个简单的问题隐藏在一个更简单问题的答案之下。
假设我使用将ofls > file.txt
重定向到 的命令。 file.txt 的内容可能如下所示stdout
ls
file.txt
some_file.txt
some_dir/
如果我还想捕获我使用的实际命令,我该怎么办?例如,使用这个新命令,文件的内容应如下所示
$ls
some_file.txt
some_dir/
注意$ls
第一行的命令。$
是 bash 符号,它对于解决我的问题不是必需的。
我有一个很长的 bash 文件,它接受用户参数,然后在 bash 命令中使用这些参数,因此需要打印完整的 bash 命令。
答案1
简短的回答:“可能不会”。你是在要求贝壳吃掉自己的尾巴。这>
只是重定向内容。它只知道输出,而不知道内容来自的命令。您的命令history
在执行之前也不会被写入。您可以打开调试(set -x
),但这也会打印出术语颜色/字符,这可能不是您想要的。因此,最好的选择可能是在管道之后运行一个额外的命令:
$ sed -i 1i\\"$(history -1 | cut -f 1 -d ';' | cut -c 8-)" some_file.txt
可能有一种更聪明的方法可以做到这一点,但是应该将最后一个命令放入some_file.txt
.不适用于每个命令、特殊字符等,因此您可能需要对其进行调整,但您也可以将其放在别名中以帮助简化它。