Git Bash如何在终端中执行命令后删除空行

时间:2019-10-31 06:09:27

标签: git-bash

我将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 $

如图所示: enter image description here

我的问题是如何删除这种命令尾换行符?

甚至,在执行每个命令之后,哪个源文件正在添加这些换行符?原因我几乎检查了与PS1和输入相关的每个文件,但是我仍然不知道为什么会发生这种愚蠢的功能。非常感谢您的帮助。

1 个答案:

答案 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

说明:

  • 这实际上向其中之一添加了新代码;

    1. 现有.bash_profile启动文件的结尾(如果文件{em> 已经存在于您的HOME目录中)。

    2. 或在主目录中新创建的.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文件中的值。

为此:

  1. 在代码编辑器中打开名为git-prompt.sh的文件。该文件通常位于:

    C:/Program Files/Git/etc/profile.d/git-prompt.sh

  2. 查找换行符的实例,即\n并将其删除。

    例如;我的git-prompt.sh文件包含几行,内容为:

    PS1="$PS1"'\n'
    

    我简单地删除了'\n'部分,使它们显示为:

    PS1="$PS1"
    
  3. 保存对git-prompt.sh文件所做的更改,然后创建一个新会话(即,创建一个新窗口或重新启动Git Bash)。

相关问题