如何在bash shell中的输出前设置一个空行?

问题描述 投票:0回答:4

我有这个:

$ any_command
any_command: command not found

但是我需要这个:

$ any_command

any_command: command not found

PS1 添加了什么?

bash shell unix ps1
4个回答
2
投票

您可以使用

trap
命令和
DEBUG
信号:

trap 'echo' DEBUG

这将在任何命令输出之前打印换行符。

$ any_command

bash: any_command: command not found
$

或者:

$ date

Tue Sep 29 17:51:38 EDT 2015
$

0
投票

PS1 换行提示

GNU Bash 手册包含有关提示的部分。换行符可能就是您正在寻找的。例如:

export PS1='\n$ '

或者,您可以简单地在命令之前或之后添加回显。例如:

$ 回声;回声富

使用 PROMPT_COMMAND 插入任意输出

您可以使用 Bash shell 的 PROMPT_COMMAND 变量自动执行额外的回显(或其他屏幕输出)。 PROMPT_COMMAND 不仅限于提示,但在这种情况下当然可以利用它来执行您想要的操作。例如:

# call echo before issuing PS1
export PROMPT_COMMAND='echo'

# print the equals sign 80 times before issuing PS1
export PROMPT_COMMAND="printf '=%.0s' {1..80}"

0
投票

我也想要一种方法来做到这一点 - 帮助在视觉上区分提示与其他命令输出(特别是当我不能这样做时,颜色并不总是一个选项) - 这就是我想出的:

export PROMPT_COMMAND="echo; trap 'echo; trap - DEBUG' DEBUG"

首先 echo 在提示符之前运行,然后我们设置陷阱,它会执行后提示换行符,并删除陷阱,至少直到下一次运行提示命令时为止。

现在说这是否是一个好主意还为时过早!但它有效:

root@epyc:~# seq 1 5

1
2
3
4
5

root@epyc:~#

0
投票

上面提供的答案,

export PROMPT_COMMAND="echo; trap 'echo; trap - DEBUG' DEBUG"
效果很好,但我注意到在vscode的集成终端中它不起作用。因此,我删除了第一个 echo 并修改了 PS1 变量以在执行命令后打印新行。

export PROMPT_COMMAND="trap 'echo; trap - DEBUG' DEBUG"
export PS1="\n$PS1"

我尝试了很多选择,这是迄今为止最好的;好吧,直到其他人提出另一个解决方案。 我尝试使用

trap echo DEBUG
,但这对每个命令都执行了 echo。因此,如果您使用管道命令,它将对每个管道执行 echo。因此这个解决方案最终对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.