1

.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)'

代わりに"a で変更すると、エラーがスローされないため、エラーはにあります。もちろん、期待どおりに動作しません。,tmux

誰かがこの問題を解決する方法を教えてもらえますか?

私はすでに逃げようとし"ましたが、'運が悪かったです。

4

1 に答える 1

3

シェルに取得させたいものから始めます。

iwgetid | cut -d '"' -f 2

#()の展開でシェルコマンドとして扱われるようにラップしstatus-leftます。

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

これをtmuxが解析できる文字列として埋め込みます。一重引用符で囲もうとしました:

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

問題は、tmuxが最初の「内側」の一重引用符と最初の「外側」の一重引用符を単一の文字列セグメントとして解釈し、次の二重引用符をトップレベルに残して、そこで終了していない文字列セグメントを形成することです。 ; この状況では、エラー メッセージはあまり明確ではありません。

この問題を解決するには、選択したtmux引用文字の書式文字列 (シェル コマンドを埋め込む) を適切に引用する必要があります。次のようにします。

set -g status-left '#(iwgetid | cut -d '"'\"'"' -f 2)'

しかし、これは少し読みにくいので、シェル コマンドをより簡単な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 形式のシェルの引用に似ていますが、同一ではないことに注意してください(たとえば、トップレベルのバックスラッシュのエスケープは同じようには機能しません)。この引用符システムは、構成ファイルcommand-prompt(例: Prefix :)、confirm-beforeおよびif-shellコマンド パラメータ、およびコマンドのコマンド テンプレートで使用されchoose-ます。

于 2013-07-01T04:51:29.227 に答える