Bash:如何将每个命令的输出重定向到文件?

Bash:如何将每个命令的输出重定向到文件?

我经常像这样对我的源代码存储库进行搜索:

ack -l "foo bar" .

搜索可能需要 10-60 秒并产生如下输出:

path/to/file1       
path/to/file2
path/to/file3

我经常使用这个别名来打开 vim 中找到的所有文件:

alias go='gvim `fc -s` -p'

这可以正常工作,但fc -s会重新运行上一个命令,这可能需要几秒钟或几分钟的时间。


将这样的内容附加到我以交互方式运行的每个命令中将非常有用:

| tee /tmp/lastCommand to all commands.  

这样,如果输出表明自己有用,那么我可以对其做其他事情。

用法示例:

类型:

find . -type f 

它执行以下操作:

find . -type f | tee $lastOutLocation # Where lastOutputLocation=/tmp/lastOutput

然后,您可以使用类似的内容来过滤上一个命令:

lastOut | grep "SomeString" # Where lastOut is an alias to cat $lastOutputLocation

有没有一种机制可以用来做这样的事情? 我不认为别名会暴露这种行为。

潜在的障碍:

  • 获取与复合命令一起使用的东西:echo 'baz' ; echo 'bar'
  • 弄清楚如何在运行之前修改用户输入的命令
  • 忽略交互式输入之类的东西。不想捕获密码提示

可能的解决方案,我目前正在探索:

答案1

将这样的内容附加到我以交互方式运行的每个命令中将非常有用:

| tee /tmp/lastCommand to all commands.  

一个可能的开始可能是使用~/.inputrc绑定密钥。 (这是 GNU Readline 库的配置文件。)例如,使用字母 o 作为助记符输出...

Control-o: " | tee /tmp/lastCommand"

人们可以绑定到Return/Enter键,但该操作会产生意想不到的效果。

答案2

如果我理解您想将命令的输出重定向到文件,可以通过以下方式完成:

#command > output_file
Or also #command | output_file

第一个更改输出通道,因此它将写入终端的所有内容都会写入output_file,第二个通过管道传输两个程序...

相关内容