web-dev-qa-db-ja.com

tmuxを起動してコマンドを発行するためのBashスクリプト

Nautilusスクリプトを使用して、特定の場所でtmuxセッションを使用して(gnome-)ターミナルを開き(または開始して)、このターミナルでいくつかのコマンドを実行したいと思います(nvim $ fileなど)。

ただし、2つの問題が発生しました。1:「tmux」で「シェルの代わりにカスタムコマンドを実行」しているため、すべての端末がtmuxセッションで起動します。これは、特定の場所でターミナルを開く機能を無効にするようです。私が試したのは、実行可能なtest.shファイルを~/.local/share/nautilus/scripts/に次の内容で配置することです。

#!/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で正常に終了しました」というダイアログバンドが青色でドロップダウンされます。そして、右側にある再起動ボタン。 -これは、新しいセッションや端末などが開始された(子)という意味だと思いますが、継続しないので、やがて使えるようになります!?

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

2
mike

Tmuxに大きく依存するソリューションを見つけました。 tmuxはシェルとは独立して動作し、ウィンドウを閉じた後でも優先されるため、tmuxセッションを準備してから接続することができます。アタッチメントコマンドは終了しないと戻らないため、すぐには終了しません。

これと、セッションに名前を付けて検索できるという事実により、次のNautilusスクリプトが生成されます。

#!/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には;から:への再マッピングが含まれています。つまり、実行するには、送信されたキーで「通常の」vim/neovim設定を確認する必要があります。

0
mike