在bash中执行并记录命令
我正在用各种工具在bash中进行一些数据分析,有时我会输入在bash中执行并记录命令,bash,Bash,我正在用各种工具在bash中进行一些数据分析,有时我会输入 >some_command -with -complicated -arguments 通常我会立即跟进 >echo "some_command -with -complicated -arguments" >> mylog.txt 有没有办法一次完成这一切?点击向上箭头、添加echo和引号等都很痛苦 我不想记录我的整个会话,我应该补充说,因为会有很多东西不值得记录 根据Charles Duffy指出的参考资
>some_command -with -complicated -arguments
通常我会立即跟进
>echo "some_command -with -complicated -arguments" >> mylog.txt
有没有办法一次完成这一切?点击向上箭头、添加echo
和引号等都很痛苦
我不想记录我的整个会话,我应该补充说,因为会有很多东西不值得记录 根据Charles Duffy指出的参考资料,我最终将其添加到了我的.bashrc中:
verbose () {
echo "$@" >> mylogfile
"$@"
}
verbose sleep 1 # "sleep 1" is the example command
logit() {
fc -ln -1 | sed '1s/^[[:space:]]*//' >> ${1:-commands.txt}
}
因此,
logit
本身将把最后一个命令添加到commands.txt
,而logit myfile
将把最后一个命令添加到myfile
查看history
命令以及.bash_history文件cross site duplicate:Local very near duplicate(回答另一个会使这个问题的答案显而易见):同样,这将记录-foo“bar baz”
与-foo bar baz
相同。如果您只需要与用户运行的命令语义等价,考虑:verbose(){local cmd_q;printf-v cmd_q'%q'$@;printf'%s\n'${cmd_q%}>>mylogfile;“$@”}
——但这只是语义等价,不是精确的文本(比如,verbose cat-“$(某个东西)”>其他地方
不会记录重定向,也不会记录它是某个东西的输出,该东西在所述重定向之前用于形成最后一个参数)。是的,这是一个问题。例如,sed-i“s/Alice/Bob/g”test.txt
被记录为sed-i s/Alice/Bob/g test.txt
。我希望存储准确的原始命令。