【问题标题】:Error in tmux's configuration filetmux 的配​​置文件出错
【发布时间】:2013-06-28 03:22:36
【问题描述】:

.tmux.conf 文件中,我有这一行:

set -g status-left '#(iwgetid | cut -d '"' -f 2)'

当我运行 tmux 时会引发错误:

/home/user/.tmux.conf:8: invalid or unknown command: set -g status-left '#(iwgetid | cut -d '"' -f 2)'

错误出现在",因为当我用, 更改它时,tmux 不会引发错误。当然,它的表现也不尽如人意。

谁能告诉我如何解决这个问题?

我已经尝试转义 "',但没有运气。

【问题讨论】:

    标签: linux config tmux


    【解决方案1】:

    从你希望 shell 得到的开始:

    iwgetid | cut -d '"' -f 2
    

    将其包裹在#()中,这样它就会在status-left的扩展中被视为一个shell命令:

    #(iwgetid | cut -d '"' -f 2)
    

    将其嵌入为 tmux 可以解析的字符串。你试图在它周围加上单引号:

    '#(iwgetid | cut -d '"' -f 2)'
    

    问题在于 tmux 会将“内”单引号中的第一个和“外”单引号中的第一个解释为单个字符串段,而将下面的双引号留在顶部-它现在形成未终止的字符串段的级别;在这种情况下,错误消息不是很清楚。

    要解决此问题,您需要为您选择的 tmux 引号字符正确引用格式字符串(嵌入 shell 命令)。你可以这样做:

    set -g status-left '#(iwgetid | cut -d '"'\"'"' -f 2)'
    

    但是,这有点难以阅读,所以你可以考虑将你的 shell 命令切换到更容易的东西 tmux-quotable:

    iwgetid | cut -d \" -f 2
    

    您可以使用 tmux 单引号将其嵌入到 status-left 中,如下所示:

    set -g status-left '#(iwgetid | cut -d \" -f 2)'
    

    或者像这样用 tmux 双引号:

    set -g status-left "#(iwgetid | cut -d \\\" -f 2)"
    

    请记住,tmux 引用与 Bourne 样式的 shell 引用相似但不完全相同(例如,顶级反斜杠转义不起作用)。此引用系统用于配置文件command-prompt(例如前缀:)、confirm-beforeif-shell 命令参数以及choose- 命令的命令模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-24
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2012-03-26
      • 2018-08-05
      相关资源
      最近更新 更多