限制所有Linux命令的输出

5
我正在寻找一种方法来限制Linux中所有命令行程序产生的输出量,并希望最好在限制时通知我。
我正在使用有显示延迟的服务器。偶尔,我会不小心运行一个会向终端输出大量文本的命令,比如在大文件上运行 `cat` 或在包含许多文件的目录上运行 `ls`。然后我必须等待一段时间,直到所有输出都打印到终端上。
因此,是否有一种方法可以自动将所有输出导入像 `head` 或 `wc` 这样的命令中,以防止太多输出必须打印到终端?
5个回答

3

我不知道一般情况如何,但对于每个常用命令(如cat、ls、find等),您可以执行以下操作:

  • 将复制的硬链接到现有实用程序
  • 编写一个小的bash函数,调用实用程序并将其管道传输到head(或wc等)
  • 将实用程序的名称别名为调用您的函数。

因此,按照这些线路(完全未经测试):

$ ln `which cat` ~/bin/old_cat

function trunc_cat () {
   `old_cat $@ | head -n 100`
}

alias cat=trunc_cat

是的,我也考虑过那种方法,但希望有更通用的解决方案。 - daniel

1

也许使用屏幕会有帮助?


我使用byobu,但仍需等待所有输出显示完毕。是否有我不知道的功能可以帮助解决这个问题? - daniel
按下 Ctrl+A Esc,终端将在当前位置冻结。您可以使用 Esc > 跳到末尾。 - Michael Hoffman

1

这让我想起了bash-completion。

在bash中,complete命令使您能够在找不到程序时指定处理程序,

那么,写自己的处理程序并清除$PATH,以便将每个命令重定向到过滤管道中执行,怎么样?

#我自己没有尝试过。


1

给你的所有命令创建别名是一个不错的开始。可以像这样:

alias lm="ls -al | more"
alias cam="cat $@ | more"

0
假设您正在通过网络连接(如ssh)连接到远程服务器,则尝试将命令的输出导入到less中。这样,您就可以更好地管理和浏览来自服务器上程序的输出。使用“j”和“k”向上和向下移动每行,“ctrl-u”和“ctrl-d”向上和向下移动半页。这样做时,只有相关文本(即适合屏幕的文本)将通过网络传输。

我正在寻找比总是要管道到less更自动化的东西。这也存在一个问题,即对于少量输出打开less并且失去例如ls的着色。 - daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接