1

.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)'

错误在于,"因为当我用 a 更改它时,tmux不会引发错误。当然,它的行为也不如预期。

有人可以告诉我如何解决这个问题吗?

我已经尝试过逃跑"'但没有运气。

4

1 回答 1

3

从您希望 shell 获得的内容开始:

iwgetid | cut -d '"' -f 2

将其包装起来,#()以便在扩展中将其视为 shell 命令status-left

#(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

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

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

或者像这样使用tmux双引号:

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

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

于 2013-07-01T04:51:29.227 回答