【问题标题】:How can I change the color of my shell when a specific command is used?使用特定命令时如何更改 shell 的颜色?
【发布时间】:2019-12-06 09:45:53
【问题描述】:

每当我使用 ssh 时,我都希望终端的背景改变颜色。 ssh 的使用通常表示我已登录到生产环境,因此应注意不要做任何愚蠢的事情。

现在我正在使用 iterm2,但很高兴听到这对于任何其他 shell 是否可以以一种好的方式完成。

【问题讨论】:

  • iterm2 是终端仿真器,而不是外壳
  • 你有没有尝试过?
  • 替代方案,您可以设置提示颜色(例如,为 prod 框设置背景为红色);所以别名 ssh 命令来设置颜色,然后执行 ssh。虽然不影响全屏背景......但提示会给出一些视觉指示。
  • @DarrenSmith 这行不通,因为在“ssh”之后,“运行”的 shell 是远程的,而不是本地的......
  • 我可以建议您阅读unix.stackexchange.com/questions/234393/… 并将远程shell 配置为使用特定提示或类似...

标签: shell fish iterm2


【解决方案1】:

您可以在 iTerm2 中通过Automatic Profile Switching 执行此操作。

【讨论】:

    【解决方案2】:

    这在任何便携方式中都是不可能的,因为没有公认的转义序列来更改终端背景颜色等内容。

    请注意,您链接到的示例脚本只会更改当前 iTerm 终端选项卡的背景颜色;不是终端文本区域的背景颜色。如果像我大多数时候一样,您只有一个选项卡,并且已将 iterm 配置为在只有一个选项卡时不显示选项卡,您将不会看到颜色变化。如果您在 screentmux 会话中执行此操作,它也将不起作用(您需要将序列包装在特殊的 tmux“通过”序列中)。

    我推荐的方法与我使用 sudo fish 以 root 身份运行 shell 时所做的相同。修改您的fish_prompt 函数以检测特殊情况并使用替代提示。例如,这是我的 fish_prompt 函数的相关部分,用于在我是 root 时使其显而易见:

    set -l color_cmd_sep $fish_color_host
    if test "$USER" = 'root'
        set color_cmd_sep -b bryellow red
    end
    
    echo -ns (set_color $fish_color_host) $now ' ' $__fish_prompt_hostname
    echo -ns (set_color $fish_color_cwd) ' ' (prompt_pwd) ' ' (set_color normal)
    echo -ns (set_color $fish_color_git) (__fish_vcs_prompt | string trim) (set_color normal)
    echo -ns (set_color $color_cmd_sep) '>' (set_color normal) ' '
    

    您需要做的就是添加一个类似的测试以在 ssh 会话中进行测试;例如,通过测试是否存在 SSH_CLIENTSSH_CONNECTION 环境变量:if set -q SSH_CLIENT。如果为 true,则更改提示的颜色或内容。

    【讨论】:

    • iTerm 的“自动配置文件切换”,正如荒谬的鱼的回答所提到的,可以用于此,但它显然仅限于 iTerm。这也是 iTerm 的一个极其复杂的功能(我已经将其用作我的主要 shell 已有十多年了)。我更喜欢一种解决方案,例如自定义 fish_prompt 函数,无论终端类型如何都能正常工作。特别是因为任何可能关心这种情况的人都可能使用screentmux,并且至少偶尔会使用iTerm 以外的终端。
    猜你喜欢
    • 2014-02-03
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多