2013-07-01 41 views
1

.tmux.conf文件,我有这样一行:错误TMUX的配置文件

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不会引发错误。当然,它的表现也不如预期。

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

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

回答

2

开始你想要的外壳得到什么:

iwgetid | cut -d '"' -f 2 

敷在#(),这样它将作为一个shell命令的status-left扩展处理:

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

嵌入此作为一个字符串,tmux可以解析。你试图把它周围的单引号:

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

的问题是,TMUX将解释“内部”单引号的第一和第一个“外”单引号作为单个弦线段,在它现在形成未终止的字符串段的顶层留下以下双引号;错误信息在这种情况下并不十分清楚。

要解决此问题,您需要正确引用格式字符串(它嵌入了shell命令),以便为您所选的tmux引用字符引用。你可能不喜欢这样:

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(例如前缀:),confirm-beforeif-shell命令参数以及choose-命令的命令模板中。