同じシェルを引き続き使用できるようにスクリプトをバックグラウンドで実行するにはどうすればよいですか?

同じシェルを引き続き使用できるようにスクリプトをバックグラウンドで実行するにはどうすればよいですか?

すべての計算を自動化するスクリプトが機能しますが、時間がかかります。スクリプトの起動にはユーザー入力が必要で、完了するまで実行されます。

ユーザー入力後にスクリプトの実行を維持し、同じシェルで別の操作を続行する方法

答え1

バックグラウンドでスクリプトを実行するには、シェルスクリプトのコマンドの後にアンパサンド(&)を追加します。つまり、次のようになります。

#!/bin/bash
echo "type something"
read text
command $text &

上記は私が意味するものの基本的な例です。

すでにスクリプトを起動している場合、Ctrl+はZスクリプトを一時停止してからbgバックグラウンドで再起動します。

データを顕著に出力するコマンドを実行すると、バックグラウンドで実行していてもコンソールに出力されます。これを防ぐには、標準出力をパイプする必要があります。入力すると、fgバックグラウンドプロセスがフォアグラウンドに移動します。

答え2

最も簡単な方法は、データ入力が完了したらCtrl+(スクリプトの一時停止)を押してから、スクリプトをバックグラウンドに送信して実行し続けることです。これにより、現在のシェルセッションを正常に使用できます。Zbg

しかし、より良いアプローチは、ユーザー入力を必要としないようにスクリプトを変更することです。スクリプトを起動するときに必要な入力をパラメータとして渡すだけです。これにより、ユーザーとユーザーの両方の人生が簡単になります。

たとえば、次のようになります。

#!/bin/bash
echo "Give me the first number! "
read num1

echo "Give me the second number! "
read num2

これを使用してください:

#!/bin/bash
num1=$1
num2=$2

次のようにスクリプトを実行します(ここで、銀10とそれぞれ30に保存されているサンプル番号)。num1num2

script.sh 10 30 > out 2>err&

これにより、スクリプトはすぐにバックグラウンドで送信され、すべての出力が名前付きファイルにリダイレクトされ、outすべてのエラーメッセージが名前付きファイルにリダイレクトされますerr。すべてのパラメータは起動時にすでに設定されているため、追加の対話は必要ありません。

通常、可能であれば、ユーザー入力を必要とするスクリプトを作成しないでください。スクリプトを提供するためにコンテンツを入力するのは難しく、エラーが発生しやすく、自動化が難しく、後で同じ操作を繰り返すのが難しくなります。

答え3

別のシェルウィンドウを開くことを検討してみましたか? VT-100ターミナルまたは同様のターミナルを強制的に使用する必要がある場合は、非常に驚​​くでしょう。このターミナルはずっと前に人気を集めていませんでした。

答え4

tmuxまたは、同じscreen端末マルチプレクサを使用することをお勧めします。これにより、バックグラウンドコンソールでプログラムを実行し、時々出力を確認したり、プログラムのコンソールでアクティビティが発生したときに通知を受け取ることができます。あるいは、別のウィンドウで実行し、別のウィンドウで別のタスクを実行している間にプログラム出力を表示することもできます。

関連情報