linux - tmux的配置文件出错

标签 linux config tmux

.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-beforeif- shell 命令参数,以及 choose- 命令的命令模板。

关于linux - tmux的配置文件出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397127/

相关文章:

linux - 在 shell 脚本中拆分并重命名拆分的文件

PHP file_exists 仅适用于 root :root

linux - 在 Ubuntu 上不使用终端命令打开 Jupyter 笔记本?

c# - 在外部文件中写入 appSettings

linux - 一个 gnu screen session 可以同时具有分割和非分割工作区吗?

java - 无法从 linux 中的 eclipse juno 端口 80 启动 Apache tomcat

javascript - 使用javascript读取config.xml文件

ios - 是否可以创建配置文件 "on"iphone?

session - 如何将两个 tmux 窗口合并为一个窗口?

session - 如何在不关闭 tmux 的情况下注销 SSH session