打开bash -x

时间:2012-12-21 13:50:28

标签: linux bash

当我在我的linux控制台上为我输入的每个命令打开bash -x时,我得到了这个输出。

printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

这很烦人,怎么能把它关掉。

提前致谢

4 个答案:

答案 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文件中的提示设置,方法是在文件末尾添加上面两行。