在 .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
不会抛出错误。当然,它的行为也不如预期。
谁能告诉我如何解决这个问题?
我已经试过转义 "
和 '
但运气不好。
最佳答案
从您希望 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 引用,但不完全相同(例如,顶级反斜杠转义的工作方式不同)。此引用系统用于配置文件、命令提示符
(例如前缀 :
)、confirm-before
和 if- shell
命令参数,以及 choose-
命令的命令模板。
关于linux - tmux的配置文件出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397127/