是否可以在提示中的命令后插入分隔符?这是一个例子:
~/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:
Run Code Online (Sandbox Code Playgroud)
具体我想在发出命令后添加 --------- 部分,以便更容易地区分命令和结果
在 zsh 中,您可以定义钩子函数preexec
在每个命令执行之前回显指定的字符串。
在 bash 中,您可以使用DEBUG
陷阱来设置 preexec 挂钩来执行相同的操作。
您将定义一个 preexec() 函数,如下所示:
preexec () { echo "-------------------------------"; }
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
preexec
}
trap 'preexec_invoke_exec' DEBUG
Run Code Online (Sandbox Code Playgroud)
看到更多的细节的确有庆典正在执行一个命令之前运行的钩子?
不过,我认为这不适用于所有版本的 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
说“在每个简单命令之前”。
如果您在 shell 中使用 bash 或 ksh,您可以在您的一个点文件(.profile、.bash_profile 等)中创建一个函数,如下所示:
function hr {
echo "--------------------------------------------------------------------------------"
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在希望该分隔符使用&&
或;
作为命令分隔符时将其添加到命令中。如:
bash-[534]$ hr && ls
--------------------------------------------------------------------------------
ddtool_23.jnlp prtconf-pv
Run Code Online (Sandbox Code Playgroud)
或者
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
Run Code Online (Sandbox Code Playgroud)
我这样做。我还有第二个功能可以打印更厚的分隔符。
function hr2 {
echo "================================================================================"
}
Run Code Online (Sandbox Code Playgroud)
我经常在 shell 脚本中使用这些函数来分隔脚本的不同部分,例如hr2
主要任务hr
之间以及循环语句中的项目之间。它使阅读脚本输出变得更加容易。