tmuxのウィンドウにコマンドを送信する

tmuxのウィンドウにコマンドを送信する

tmuxでMinecraftサーバーを実行し、bashスクリプトからサーバーウィンドウにコマンドを送信したいと思います。

以下は私のスクリプトです。

#!/bin/bash
echo "Starting vanilla server..."
sleep 2
# Start a new session with name MC
tmux new-session -d -s MC

# Start minecraft in a new window named UHC
tmux new-window -t MC:1 -n 'UHC' 'java -Xms512M -Xmx1G -jar Minecraft.jar nogui'

# And attach to it
tmux a

# Wait 10 seconds
sleep 10

# Run a command
tmux send-keys -t MC:1 'worldborder get' Enter

サーバーが起動しましたが、コマンドは送信されませんでした。私は何が間違っていましたか?

答え1

マルチプレクサクライアントが切断されるまで(またはそのセッションが消えるまで)、コマンドattach-sessionは終了しません。スクリプトは効果的にtmux a一時停止され、コマンドが完了するのを待ちます。

クライアントが切断された直後にいくつかのコマンドを実行したい場合を除き、接続をスクリプトの最後のステップとしてスケジュールできます。

スリープ中に接続されたクライアントを介してウィンドウを表示するには(たとえば、Minecraftサーバーの起動を表示する)、次の手順を実行します。強く打つバックグラウンドで実行し、sleep次の操作を行います。tmux send-keys

tmux new-session -d …
tmux new-window …
{
    sleep 10
    tmux send-keys …
} &
tmux attach-session …

関連情報