ファイルの各行を独自のサブシェルで実行する必要があります。

ファイルの各行を独自のサブシェルで実行する必要があります。

うまく動作しますが、シリーズごとに実行されるスクリプトがあります。

スクリプトがテキストファイルの各行を取得し、サブシェルでその行を実行/生成した後、次の行に移動するなどの操作を実行したいと思います。

2つの理由でサブシェルが必要です。
まず、ジョブを直列ではなく並列に実行して、より高速に実行するためです。
次に、与えられたコマンドの出力を監視し、リモートシステムから終了コードを返します。

どうすればいいのか知っている人はいますか?

いくつかの背景知識では、テキストファイルの各行はオプション、ユーザー入力、および他の入力ファイルから収集された機能を使用してリモートシステムで実行されるsshコマンドの集合であるため、スクリプトによって生成された出力の各行はスタンドアロンサーバーコマンドです。 。

actionを介してスクリプトを呼び出します/bin/bash $temp_file

サンプルスクリプトは次のとおりです。

sshpass -p <PASSWORD> ssh -o StrictHostKeyChecking=no -p 22 [email protected]  'cat /etc/hostname  ;echo 'START';echo `date +%Y-%m-%d` ; echo <PASSWORD> |sudo -S yum update -y; cat /etc/hostname ;echo 'FINISH';echo `date +%Y-%m-%d` ;echo '';echo ''

これは単なる例であり、実行するコマンド(たとえば、yum update -yここでエコーや日付で使用するコマンド)は単一のコマンドに置き換えるか、orで;区切ります。$$

その行に問題を引き起こす可能性のある文字がたくさんあることがわかります。

答え1

GNU Parallelは以下のために作成されました:

parallel --joblog my.log < myfile.sh

--sshlogin/--sshloginfile、、、、--jobs N--tagも便利--linebufferです。--nonallどのジョブが関連しているかを確認するには、実行するリモートジョブに関する追加情報を公開する必要があります。

答え2

各行を読み、evalそれを評価するために使用できます。

IFS=""
while read -r line; do
   eval "( $line )"
done < command_file

要求された最小限の操作を実行します。つまり、各行をサブシェルで実行します。

関連情報