相关疑难解决方法(0)

如何在不中断行长计算的情况下在 Bash 的 PS1 中包含命令?

Tonin指出了默认提示中的一个错误。最小的例子:

  1. 设置 PS1:

    PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
    
    Run Code Online (Sandbox Code Playgroud)

    此时,提示如下:

    $ 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在通过运行触发退出代码输出:

    false
    
    Run Code Online (Sandbox Code Playgroud)

    现在提示在行的开头包含红色的退出代码:

    1 $ 
    
    Run Code Online (Sandbox Code Playgroud)
  3. Ctrl- r
  4. 输入“假”。现在提示只包含搜索:

    (reverse-i-search)`false': false
    
    Run Code Online (Sandbox Code Playgroud)
  5. Enter

生成的终端历史记录现在包含以下内容:

1 $ch)`false': false
Run Code Online (Sandbox Code Playgroud)

预期输出:

1 $ false
Run Code Online (Sandbox Code Playgroud)

也就是说,历史搜索输出似乎与提示混合并隐藏了运行的实际命令。

我尝试使用PROMPT_COMMAND以下方法解决此问题:

set_exit_code() {
    exit_code=$?
    [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " "
}
set_bash_prompt() …
Run Code Online (Sandbox Code Playgroud)

bash prompt

13
推荐指数
1
解决办法
4935
查看次数

在 bash shell 中执行我的命令后重置输出的颜色

我想通过不同的颜色轻松地将我的命令与 shell 的其余输出区分开来。但是我在自定义 bash shell 方面没有太多经验,所以我不知道如何重置颜色(之后)我的输入。

我当前的 PS1 变量如下所示:

export PS1="$red\u$green\$(__git_ps1) $turk\w
$white$ "

# '\$(__git_ps1)' git status prompt (generates a space before it even if empty)
Run Code Online (Sandbox Code Playgroud)

所以我的输入是白色的。但即使命令的输出也是白色的,因为它没有被重置。此外,如果命令本身对其输出进行颜色编码,那么它本身会重置颜色,从而导致白色和灰色的一些难看的混合。

那么如何在输入命令后重置颜色?

bash

3
推荐指数
1
解决办法
4396
查看次数

标签 统计

bash ×2

prompt ×1