tmux run-shellがシェルを実行できることを知っています。
$ tmux run-shell "echo start; echo \${var}end"
start
end
しかし、シェルがインタラクティブに機能したり、一部のユーザー入力を読み取ったりするにはどうすればよいですか?
$ tmux run-shell "echo start; read -p \"prompt:\" var; echo \${var}end"
start
end
- 上記のコードのread文が機能しないのはなぜですか?
- 相互運用性を達成するためにtmuxを使用する方法を教えることができるtmuxの専門家はいますか?
背景:
kit.sh
私は様々な共同作業を一つの機能として集めてきました。- このスクリプトには相互作用の問題がたくさんあります。
- 今、私は.tmux.conf
kit.sh
のようなtmuxショートカットで再利用したいと思います。bind-key i "run-shell \"kit.sh\""
- 自動入力機能を追加する予定です
tmux send-keys
。kit.sh
20231016 アップデート:
私の問題は次のように解決されました。
bind-key i "new-window \"/path/to/my/kit.sh\""
kit.shでは、ユーザー入力をインタラクティブに読み取ることができます。
答え1
tmux run-shell
サブコマンドは、ttyを必要とするプログラムには適用されません。これは、read
インタラクティブモード[1]で実行すると失敗する理由とその理由を説明します。
tmux run-shell "echo start; read -p \"prompt:\" var; echo \${var}end"
失敗する。
推測されましたが、1つの方法はtmux send-keys
[2]を使用することです。split-window
[3]を使用することもできます。
tmux split-window "read -p prompt: VAR; echo \$VAR; read -p \"press any key\""
tmux
バージョン以上を使用している場合は、サブコマンド[2]を3.2
使用することもできます。display-popup
tmux display-popup "read -p prompt: VAR; echo \$VAR"
[0]https://github.com/tmux/tmux/issues/3187#issuecomment-1127079855
[1]https://www.gnu.org/software/bash/manual/bash.html#index-read
[2]https://github.com/tmux/tmux/issues/3187
[サム]https://github.com/tmux/tmux/issues/3617#issuecomment-1627569000