当我在我的linux控制台上为我输入的每个命令打开bash -x时,我得到了这个输出。
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
这很烦人,怎么能把它关掉。
提前致谢
答案 0 :(得分:4)
此命令输出转义序列以更改终端仿真程序的标题。所以我想在.bashrc
或.bash_profile
TERM
匹配xterm*
时配置它。看看那里并评论代码。
打印命令是因为bash -x
将显示调用的每个命令,即使它是打印$PS1
的一部分。这就是为什么您可能不希望在交互式shell中使用set -x
,但应该将您的代码放在脚本中并在开头添加set -x
并在结尾添加set +x
(可选)除非你source
。)
答案 1 :(得分:3)
问题不是原因,而是如何解决。在bash提示符下键入:
unset PROMPT_COMMAND; PS1='\w> '
现在为什么。 PROMPT_COMMAND
中的命令在每个bash命令(它设置PS1
)后进行评估,通常无法看到此活动。但是-x
可以。
答案 2 :(得分:0)
这似乎是您的$PROMPT_COMMAND
变量。您可能只想使用$PS1
。
请参阅http://www.gnu.org/software/bash/manual/bashref.html#index-PPID
答案 3 :(得分:0)
您可以使用set -x
启用调试功能,set +x
启用调试功能。
当您启用调试选项时,BASH将为每行打印出$P4
的值。默认情况下,它是一个简单的+
后跟一个空格。尝试设置PS4='+ '
。
如果这不起作用,您有一个Kornshell用户使用$PROMPT_COMMAND
来设置提示。在提示符中显示有用信息(如用户名和目录)很常见。在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
或.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
文件中的提示设置,方法是在文件末尾添加上面两行。