当我在我的 Linux 控制台上为我输入的每个命令打开 bash -x 时,我都会得到这个输出。
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
这很烦人,我怎么能把它关掉。
提前致谢
此命令输出转义序列以更改终端仿真器的标题。所以我猜它是在你的.bashrc
or .bash_profile
when TERM
match中配置的xterm*
。看看那里并评论代码。
打印命令是因为bash -x
将显示调用的每个命令,即使它是打印的一部分$PS1
。这就是为什么您可能不想set -x
在交互式 shell 中使用,但可能应该将您的代码放在脚本中并set -x
在开头和set +x
结尾添加(可选,除非您source
这样做)。
问题不是为什么,而是如何解决。在 bash 提示符下键入:
unset PROMPT_COMMAND; PS1='\w> '
现在为什么。command inPROMPT_COMMAND
在每个 bash 命令(它设置PS1
)之后进行评估,您通常看不到此活动。但有-x
你可以。
这似乎是您的$PROMPT_COMMAND
变量在起作用。您可能只想$PS1
改用。
见http://www.gnu.org/software/bash/manual/bashref.html#index-PPID
您可以使用set -x
打开调试和set +x
关闭它。
当您打开调试选项时,BASH 将打印出$P4
每一行的值。默认情况下,它是一个简单的+
后跟空格。尝试设置PS4='+ '
。
如果这不起作用,您有一个用于$PROMPT_COMMAND
设置提示的 Kornshell 用户。在提示符中显示用户名和目录等有用信息是很常见的。在 BASH 中,您可以使用各种转义序列来做到这一点。例如:
PS1="\u@\h:\w$ "
将替换\u
为用户名,\h
短主机名,\w
当前目录基于$HOME
目录,如果用户在$HOME/bin
,提示将显示
david@foo-sys:~/bin$
如果用户在/usr/bin
,提示将是
david!@foo-sys:/usr/bin$
使用 Kornshell,您不能使用这些转义序列。相反,您可以为cd
命令设置别名,并使用 cd 函数来设置提示。或者,您使用$(..)
语法。我使用 Kornshell,提示符如下所示:
PS1=$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")
恶心,不是吗?在 BASH 中,我可以这样做:
PS1="\u@\h:\w\n$ "
无论如何,Kornshell 用户在使用 BASH 时设置$COMMAND_PROMPT
变量而不是使用转义序列是很常见的,因为他们知道这样做。而且,当你这样做时,你会看到每次都打印出提示命令。例如,我可以这样设置我的 BASH 提示:
PROMPT_COMMAND="print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ "
当我set -x
设置好后,我每次都会看到打印出来的。
你应该做的是进入$HOME/.bash_profile
或如果该文件不存在$HOME/.profile
,并摆脱设置的行PROMPT_COMMAND
。相反,将其更改为:
PS1="\e]0\u@\h:\w\a$ "
这或多或少是相同的提示。如果您不想更改.profile
or .bash_profile
,那么只需执行以下操作:
$ unset PROMPT_COMMAND
$ PS="\e]0\u@\h:\w\a$ "
另一种可能性:可能是您没有看到在 中设置的提示$HOME/.bash_profile
,$HOME/.profile
甚至$HOME/.bashrc
。在这种情况下,您的系统管理员是 Kornshell 人员,他们已在/etc/profile
文件中设置了提示。您必须通过在$HOME/.bash_profile
文件末尾添加上述两行来自己覆盖文件中的提示设置。