如何自定义终端的命令输出?

如何自定义终端的命令输出?

我试图在终端中运行命令的第一行之前添加几个空行,并在最后一行之后添加另一个空行(以便始终运行任何命令),因为当我编辑时,PS1我只能在第一行之前添加空行,但是如果它有长结果,当我运行某些命令时它就会消失,即:运行update导致忽略添加的空行。

类似这样的事情(直到运行更新):

在此处输入图片描述

当我最大化终端窗口时,我可以有最后一个空行,然后我也希望在普通窗口中有这个空行。第一行之前的空行并不重要,但最后一个空行对我来说非常重要。我该如何处理运行命令的结果?如果我实现了这个,那么我就可以有最后一个空行。拜托!

答案1

我保留之前的答案,并根据我们的讨论再添加一个。

这不是完美的解决方案,但我认为我们可以共同改进它:

#!/bin/bash

new_line(){
    echo -e "";
}

n=0  # line counter
H=$(stty size | cut -d" " -f1)  # this is height of current terminal
# uncomment next line if you want to add empty line after (height - 1) lines
# H=$((H - 1))
new_line
eval $@ |
while IFS= read -r line
do
    echo $line;
    n=$(($n+1));
    if !((n % H)); then # every H lines it is true
        new_line
    fi;
done
new_line

使用任意名称创建该脚本,在我的情况下为test.sh,并使其可执行。

现在运行您想要作为参数的脚本和路径命令

$ ./test.sh sudo apt-get update

更新

对 OP 有用但对我没用但最终版本的脚本:

#!/bin/bash 
eval $@ | 
  while IFS= read -r line
  do 
    echo $line
  done

答案2

如果你想要完全空白的行,试试这个:

打开终端并创建这两个函数,然后执行trap

$ preexec () { echo -e ""; }
$ preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    preexec
}
$ trap 'preexec_invoke_exec' DEBUG

现在尝试执行任何命令并查看结果

请务必注明help trap

如果 SIGNAL_SPEC 为 DEBUG,则执行 ARG每个简单的命令。

如果它按您希望的方式工作,请将此功能添加trap到您的.bashrc

您可能还想将preexec功能更改为此项preexec () { echo "-------------------------------"; },因为它看起来更加独特。


欲了解更多信息,请阅读:

  1. 包装 bash 命令

  2. 执行命令前的 Bash hook

答案3

最佳解决方案:我发现了一个非常有趣的命令 stty。从 man stty:stty - 更改和打印终端线路设置。

在 tty1 中我运行了此命令:sudo stty rows 20。现在我的 tty 屏幕限制为 20 行,这允许屏幕上显示 20 行。它与 sudo apt-get install libreoffice -s 和任何其他命令配合使用。

现在,它似乎无法与 gnome-terminal 或 xterm 配合使用,但现在我正在努力寻找解决方案。可能必须在 .bashrc 文件中进行一些更改。

简约的解决方案问题在于使用 less 或 more 或 pg。例如,如果我模拟安装 libreoffice,

sudo apt-get install libreoffice -s | less

这样,最后一行就被替换为 : ,并且仍然可以运行该命令。唯一的缺点是您必须按 Enter 键,以在 pg 的情况下跳到下一页,或在 less/more 的情况下跳到下一行。

另一个解决方案是使用headtail命令。如果您不关心整个输出,而只关心输出的第一部分和结尾部分,这种方法会很有效。顾名思义,这些允许您查看输出的顶部(头部)或输出的结尾(尾部)。例如,

 sudo apt-get install libreoffice -s | head -n20;

这将给你第一的20 行输出(我发现默认值是 10)。要获取最后的20 行,与 tail 相同:

sudo apt-get 安装 libreoffice -s | tail -n20;

但是,这些解决方案的问题在于,如果您正在运行一些具有长输出的交互式命令,这可能会阻止您与该命令进行交互,因此请记住这一点。

相关内容