tmuxを起動してコマンドを実行するBashスクリプト

tmuxを起動してコマンドを実行するBashスクリプト

Nautilusスクリプトを使用して、特定の場所でtmuxセッションを持つ(gnome-)端末を開き(または起動)、その端末でいくつかのコマンド(nvim $fileなど)を実行したいと思います。

しかし、2つの問題が発生しました。 1:各端末がtmuxセッションで開始されるように、「tmux」で「シェルの代わりにカスタムコマンドを実行」しました。これは、特定の場所で端末を開く機能を無効にするようです。~/.local/share/nautilus/scripts/内容を含む実行可能なtest.shファイルを挿入しようとしました。

#!/bin/bash
gnome-terminal --working-directory=$NAUTILUS_SCRIPT_CURRENT_URI 

これは空の構成ファイルに適用されます。ただし、起動コマンドとして「tmux」を使用すると、~に空の端末が表示されます。

2:後でコマンドを使用しようとすると、何も起こりません。

nvim some_file_there

何もしませんecho "hi"exec echo 'hi'

誰かが私にこの行動を説明できますか?

また、端末で「カスタムコマンドの実行」設定を無効にしました。ただし、作業ディレクトリだけを変更でき(ここで端末を開く)、コマンドを実行することはできません。

私の最新のテストスクリプトには以下が含まれます。

#!/bin/bash
zenity --info --text="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
gnome-terminal -e "ls"

作業ディレクトリをNautilusスクリプトが実行されているディレクトリに変更する方法はありますか?また、lsコマンドの結果も表示されますが、ターミナルには青いドロップダウンがあるダイアログボックスに、「サブプロセスがステータス0で正常に終了しました」と表示されます。右側に再起動ボタンがあります。 - これは新しいセッションやターミナルなどが始まったが(子プロセス)続くことなく、ついに使用できるという意味のようです! ?

誰かがここで何が起こっているのかを明確にすることはできますか?

答え1

tmuxに大きく依存するソリューションを見つけました。 tmux はシェルとは独立して動作し、ウィンドウを閉じた後もアクティブなままであるため、tmux セッションを準備した後に接続できます。終了しないと、添付コマンドは返されないため、そのエントリはすぐに終了しません。

これにより、セッション名を指定して検索できるという事実によって、次のノーチラススクリプトが生成されます。

#!/bin/bash
# nautilus script to start files in nvim under a tmux session
# place this script into ~/.local/share/nautilus/scripts/nvimOpen.sh
# presented without warranty by mike aka curvi

# nvim running in another session? -
# TODO tmux rename-session -t $whaever nvim

# Tmux session 'nvim' is running neovim always!
if tmux has-session -t nvim ; then
  # test if it is open and split it
  for selected_file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; do
    tmux send-keys -t nvim Escape # change to normal mode
    tmux send-keys -t nvim ";vsp $selected_file" Enter # open file in vsplit
  done
else
  # or start it up freshly!
  tmux new-session -d -s nvim ;
  tmux send-keys -t nvim "nvim -O $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" Enter
  tmux send-keys -t nvim Escape # change to normal mode
fi
# after the tmux session is prepared - attach to it in gnome-terminal!
gnome-terminal -e "tmux attach-session -d -t nvim"

ボーナス:コマンドを直接実行するのではなくキーを送信したため、端末履歴に期待どおりに表示されます。

;注:私のnvim / init.vimにはVMの再マッピングが含まれています:。つまり、実行するには、送信されたキーで「一般」vim / neovim設定を確認する必要があります!

関連情報