将命令换行到提示符中

将命令换行到提示符中

是否可以在提示中的命令后面插入分隔符?这是一个例子:

~/Desktop: ls -al
-------------------------------------
total 80
drwx------+  6 eddie  staff   204B Apr 29 16:57 .
drwxr-xr-x+ 54 eddie  staff   1.8K Apr 30 10:54 ..

~/Desktop:

具体来说,我想在发出命令后添加 --------- 部分,以便更容易地区分命令和结果

答案1

在zsh中,可以定义hook函数preexec在执行每个命令之前回显指定的字符串。

在 bash 中,您可以使用DEBUGtrap 设置 preexec 挂钩来执行相同的操作。

您可以定义一个 preexec() 函数,如下所示:

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

查看更多详细信息bash 是否有一个在执行命令之前运行的钩子?

我不认为这适用于所有版本的 bash。在我的旧 Ubuntu 服务器上,运行 bash 3.2.39(1),help trap

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

在另一台服务器上,运行 bash 4.1.2(1),它说

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

这就是我们所需要的。因此,请确保在您的 bash 版本中help trap显示“每一个简单的命令。”

答案2

如果您的 shell 使用 bash 或 ksh,则可以在点文件之一(.profile、.bash_profile 等)中创建一个函数,如下所示:

function hr {
    echo "--------------------------------------------------------------------------------"
}

然后,只要您希望使用该分隔符&&;将其用作命令分隔符,您就可以将其添加到命令前面。如:

bash-[534]$ hr && ls
--------------------------------------------------------------------------------
ddtool_23.jnlp  prtconf-pv

或者

bash-[536]$ hr ; ls -la
--------------------------------------------------------------------------------
total 36K
drwxr-xr-x  2 tim staff    4 2012-12-06 15:02 ./
drwxr-xr-x 46 tim staff  134 2013-04-30 14:59 ../
-rw-------  1 tim staff 2.7K 2012-12-06 15:00 ddtool_23.jnlp
-rw-r--r--  1 tim staff  24K 2012-12-06 15:02 prtconf-pv

我做这个。我还有第二个功能,可以打印更厚的分隔符。

function hr2 {
    echo "================================================================================"
}

我经常在 shell 脚本中使用这些函数来分隔脚本的不同部分,例如hr2主要任务之间以及hr循环语句中的项目之间。它使读取脚本输出变得更加容易。

相关内容