我正在尝试运行 tmux,一次传递多个命令,但无法正确引用字符串。
在命令行中手动输入命令即可成功:
~% /usr/local/bin/tmux start-server\; set-option -g default-command '/usr/bin/true 1 2 3' \; new-session
[exited]
但在实际情况下,我需要动态构建命令,然后无法使其正确扩展。单引号似乎在${=var}
扩展过程中被丢弃:
~% cmd="/usr/local/bin/tmux start-server; set-option -g default-command '/usr/bin/true 1 2 3' ; new-session"
~% ${=cmd}
usage: set-option [-agosquw] [-t target-session|target-window] option [value]
当将命令作为单个字符串传递时,tmux 无法理解该命令,即不包括/usr/local/bin/tmux
字符串中的标记,而是使用${cmd}
而不是来扩展其余部分${=cmd}
。
~% /usr/local/bin/tmux 'start-server; set-option -g default-command "/usr/bin/true 1 2 3"; new-session'
unknown command: start-server; set-option -g default-command "/usr/bin/true 1 2 3"; new-session
我的 zsh 版本:
⚠~% ${SHELL} --version
zsh 5.0.2 (x86_64-apple-darwin12.2.1)
答案1
${(z)var}
扩展变量,同时保持内部引号完整。