在.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
不会引发错误。当然,它的行为也不如预期。
有人可以告诉我如何解决这个问题吗?
我已经尝试逃避"
和'
但没有运气。
答案 0 :(得分:2)
从你想要的shell开始:
iwgetid | cut -d '"' -f 2
将其包裹在#()
中,以便在status-left
的扩展中将其视为shell命令:
#(iwgetid | cut -d '"' -f 2)
将其嵌入为 tmux 可以解析的字符串。你试图在它周围加上单引号:
'#(iwgetid | cut -d '"' -f 2)'
问题是 tmux 会将第一个“内部”单引号和第一个“外部”单引号解释为单个字符串段,在顶部留下以下双引号-level它现在形成一个未终止的字符串段;在这种情况下,错误信息并不十分清楚。
要解决此问题,您需要正确引用所选 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
命令参数以及{{1}的命令模板}命令。