使用set -x
导致我的 shell 打印不相关的内容。例如:
$ set -x
++ printf $'%157s\r'
$ echo 'hello'
+ echo hello
hello
++ printf $'%157s\r'
以“++”开头的行是额外的。我怎样才能删除这些多余的线?
答案1
旗帜-x
并不是严格意义上的“冗长”, 它是:
shell 应在扩展命令之后和执行命令之前向标准错误写入每个命令的跟踪。
++
意味着这行跟踪来自 shell 在考虑您的提示时自己的内部处理。它是大概在你的 : 中发生的事情PROMPT_COMMAND
在这种情况下,如果你运行:
PROMPT_COMMAND=
set -x
那么你不应该得到任何额外的输出。
也可能有其他配置导致它 — Bash 有很多提示设置 — 在这种情况下bash -norc
应该完全避免它。
也就是说,这本质上是预期的行为:-x
实际上是为了调试 shell 脚本,而不是在交互式 shell 中使用。它实际上是为了打印出它运行的每个命令,这就是它在这里所做的 - 有一个额外的命令在打印每个提示时运行。
答案2
额外的输出也可能是由$PS1
变量调用的函数产生的。尝试将其设置为最小提示:export PS1='\u@h:\w \$ '