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