我将Windows版本的Git Bash更新为3.0.2,现在我遇到了一个非常烦人的问题,很难解释。在终端中,执行完每个命令后,它将始终自动添加一个新的空行,例如:
User@path $ CMD-1
<<-- new line
User@path $ CMD-2
<<-- new line
User@path $ CMD-3
<<-- new line
User@path $
我的问题是如何删除这种命令尾换行符?
甚至,在执行每个命令之后,哪个源文件正在添加这些换行符?原因我几乎检查了与PS1
和输入相关的每个文件,但是我仍然不知道为什么会发生这种愚蠢的功能。非常感谢您的帮助。
答案 0 :(得分:1)
这是由PS1 shell变量的配置引起的。
如果您在Git Bash中运行以下命令,它将打印$PS1
变量的当前值:
echo "$PS1"
例如,我计算机上的$PS1
的默认值设置为:
\[\033]0;$TITLEPREFIX:$PWD\007\]\n\[\033[32m\]\u@\h \[\033[35m\]$MSYSTEM \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ ^^ ^^
注意:由于我使用的是早期版本的Git Bash,因此您的显示将与上面显示的有所不同。但是,需要注意的是两个换行符\n
(我添加了脱字符号^^
以清楚地指示它们)。您的$PS1
的值可能只有一个换行符\n
。
基本上,这些/此换行符(\n
)会在运行命令后产生空白的换行符。
要删除“命令尾新行” ,请考虑运行以下复合命令:
echo $'\n'"export PS1='${PS1//\\n/}'" >> ~/.bash_profile
说明:
这实际上向其中之一添加了新代码;
现有.bash_profile
启动文件的结尾(如果文件{em> 已经存在于您的HOME
目录中)。
或在主目录中新创建的.bash_profile
文件的开头(如果文件不已经存在)。
例如,您的.bash_profile
文件现在将包含一行这样的内容:
export PS1='<newvalue>'
添加到.bash_profile
的行利用export
为$PS1
shell变量定义新值。 <newvalue>
部分实际上将是您当前的PS1值减去任何换行符\n
所得到的值。
上述复合命令中读取${PS1//\\n/}
的部分利用parameter expansion从当前$PS1
值中删除所有换行符。
运行上述复合命令后,下次创建新会话(例如,创建新窗口或重新启动Git Bash)时,应解决“命令尾新行” 问题。
PS1
文件中的git-prompt.sh
值:如果您不想使用上述解决方案覆盖默认的PS1
值,则可以更改Git Bash在安装过程中创建的git-prompt.sh
文件中的值。
为此:
在代码编辑器中打开名为git-prompt.sh
的文件。该文件通常位于:
C:/Program Files/Git/etc/profile.d/git-prompt.sh
查找换行符的实例,即\n
并将其删除。
例如;我的git-prompt.sh
文件包含几行,内容为:
PS1="$PS1"'\n'
我简单地删除了'\n'
部分,使它们显示为:
PS1="$PS1"
保存对git-prompt.sh
文件所做的更改,然后创建一个新会话(即,创建一个新窗口或重新启动Git Bash)。