从您希望 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-before
和if-shell
命令参数以及命令的命令模板choose-
。