web-dev-qa-db-ja.com

特定のコマンドを実行する画面を作成する方法は?

私は* nixでかなり新しいです。特定のコマンドシーケンスを(独自の引数で)すぐに実行する画面を作成する方法はありますか? 2時間のグーグル検索では何も得られません。おそらく、質問を明確に述べることができないためです。

私は次のようなものを願っています

screen -dmS new_screen exec "cd /dir && Java -version"

画面v4.00.03およびCentOS 5.5(カーネルバージョン2.6.18-194.26.1.el5.028stab079.2)を使用しています

31

問題は、「exec」画面コマンドを使用してもシェルが起動しないことです。 「cd」はシェルに組み込まれているため、シェルが必要です。また、画面が終了しないように実行し続けるシェルが必要です。

-Xオプションを使用してscreenを実行し、実行中のscreenセッションにコマンドを送信し、「stuff」コマンドを使用してキーストロークを現在のウィンドウに送信できます。これを試して:

screen -dmS new_screen sh
screen -S new_screen -X stuff "cd /dir
"
screen -S new_screen -X stuff "Java -version
"

はい。コマンドを実行するには、次の行に引用符を付ける必要があります。

32
mloar

名前を付けて分離モードで画面を作成します。

screen -S "mylittlescreen" -d -m

次に、画面上で実行されるコマンドを送信します。

screen -r "mylittlescreen" -X stuff $'ls\n'

$コマンドの前に、シェルが引用符内の\ nを解析するようにします。コマンドを実行するには改行が必要です(Enterキーを押したときなど)。

これは、この画面バージョンで私のために働いています:

$ screen -v

画面バージョン4.00.03jw4(FAU)2006年5月2日

見てください man screenコマンドの詳細。

36
kR105

screen -dmS screen_name bash -c 'sleep 100'

これにより、screen_nameという名前の新しい画面が作成されます。また、画面内で100秒間スリープします。

sleep 100の代わりに実行するとすぐに終了するコマンドを入力すると、画面も終了することに注意してください。 つまり、作成したばかりの画面を見ることができなくなります

5
Tushar Goswami

Bashスクリプト内で定義され、画面内で使用可能ないくつかの変数を使用して、bashスクリプト内からリモート画面を起動したかったのです。だから私のために働いたのは

#!/bin/bash
SOMEVAR1="test2"
# quit existing if there is one running already, be careful
screen -D -RR test1 -X quit || true
screen -dmS test1
screen -r test1 -p 0 -X stuff $"echo ${SOMEVAR1} ^M"

リターン文字^ Mの場合、vimを使用して入力する必要があります

i CTRL-V ENTER ESCAPE
2
jsh

これが使えると思う

function exec_in_screen() {
  name=$1
  command=$2
  screen -dmS $name sh; screen -S $name -X stuff "$command\n";
} 

その後...

exec_in_screen "test" "ls"

1
Pedro Rodrigues

別のアプローチ

最初の行cdでディレクトリに移動します。 2行目は、new_screenという名前の新しいスクリーンセッションをbashで開始します。 Java -versionを実行する3行目

cd /dir
screen -dmS new_screen bash
screen -S new_screen -p 0 -X exec Java -version
0
Dilushan