
私は Arch Linux ラップトップで Minecraft サーバーを実行しています。Minecraft のサーバー ソフトウェアはコマンド ライン上の対話型プログラムとして実行されるため、デタッチされた画面セッションで起動し、アクセスする必要があるたびに再接続することができます。
これを実行するためにスクリプトを使用しました (他のときは screen を使用しないため、「grep SCREEN」については心配しないでください)
#!/bin/bash
PID=ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
sudo screen -r $PID
これにより、サーバーが実行されている画面セッションの PID が取得され、その画面に再接続されます。
今、私はこれをどこにも見つけることができないので、ワンライナーを使用して出力をリダイレクトできるかどうか疑問に思っています
ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
$argumentに直接
sudo screen -r $argument
2行にまたがる必要がなく
基本的にawkのstdoutを口論画面の標準入力としてではなく、画面の stdin として。
これは比較的簡単に見つけて実行できるように思えますが、Google でこれに関する情報を見つけるのに苦労しています。
ご協力いただければ幸いです。ありがとうございます
答え1
の代わりにps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
、次のようにすることもできます。
ps aux | awk '/SCREEN/{print $2;exit}'
または、以下をインストールするとさらに推奨されますprocps
:
pgrep SCREEN
(説明されているように、これらのコマンドをバックティックで囲むか、$()
読みやすくネストしやすく、同じことを実行する構造を使用します。)
あるいはもっと推奨: 実行中の Screen セッションが 1 つだけの場合は、次のようにします。
screen -r
デフォルトでは、存在する唯一のセッションに接続されます。
コメントにもあるように、将来的に複数のScreenセッションを実行したい場合は、セッション名付け機能を使用してください。名前付きセッションを開始するには、
screen -S minecraft
その後、
screen -r minecraft
答え2
xargsはそれを実行します
$echo abc | xargs prog
上記では、xargsは引数abcでprogを実行します。 $prog abc
もう一つの例
$ echo abc | xargs echo w x
w x abc
答え3
bash を使用している場合、別の方法としてはバックティックを使用することです。私の知る限り、バックティックが最初に評価され、その結果が式の残りの部分で使用されます。
sudo screen -r `ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'`
そうすればあなたの望みどおりになると思います。
他のコメント投稿者が指摘したように、xargs
も使用できますが、これは複数の引数を扱う場合に限って使用しています。 バックティックの方が目的を達成するのにわかりやすいと思います。