2016-08-22 4 views
0

を実行している間、リストを編集することができ、私が実行したいコマンド:は、コマンドのリストを実行したいが、私が(bashの)のリストを持っている

<Command 1> 
<Command 2> 
... 
<Command n> 

各コマンドの実行には長い時間がかかります場合によっては(例えば)<Command 1>の出力を見た後、<Command 5>のパラメータを更新するか、リストの任意の位置に新しいを追加したいと思います。しかし、私はいつでも自分のマシンから離れて、リストの最後の更新を続けていきたいと思っています。

これは質問と同様です:Edit shell script while it's running。これらの回答の中にはサービスを提供できるものもありますが、その質問にはスクリプトファイル自体を編集したいという追加の制約がありました。私はその厳密な制約がないため、簡単な答えがあると思われます。

私の現在の解決策は、スクリプトを2番目のスクリプトを使って終了することです。最初のファイルが実行されている間に2番目のファイルを編集することができます。これにより、リストの最後に新しいコマンドを追加できますが、最初のファイルのコマンドリストに変更を加えることはできません。また、2番目のファイルで実行が開始されると、これ以上の変更はできません。しかし、私は頻繁に更新を挿入するためにスクリプトを停止することがあります。これは、時折マシンを離れる前にリストの後の項目を更新できるように、ほとんど完全な長いコマンドを停止することを意味することがあります。私はもちろん、このように多くのファイルを連鎖させることができますが、それは簡単に解決策があります。

+0

実際にブランチを使わずにブランチを使いたいのですか?あなたのスクリプトにもっと多くのロジックを追加して、すべての希望の状況を処理できるようにすることをお勧めします。 XY問題があるようです。 – fanton

答えて

0

私はあなたが

EXコマンドファイルのすべてのファイルに、メインファイルリストで実行する各コマンド置くことを言う:main.sh

#!/bin/bash 

# Here you define the absolute path of your script 

scriptPath="/home/script/" 

# Name of your script 

scriptCommand1="command_1.sh" 
scriptCommand2="command_2.sh" 
... 
scriptCommandN="command_N.sh" 

# Here you execute your script 

$scriptPath/$scriptCommand1 
$scriptPath/$scriptCommand2 
... 
$scriptPath/$scriptCommandN 

私が思うに1が動作している間に外部ファイルなので他のファイルを変更することができます

2

これは完全なコードを提供するものより概念的な答えです。私の考えはRedisを実行することです(Redis description here) - これはインストールが簡単で、データ構造サーバーとして使用します)。あなたの場合、データ構造はジョブのリストになります。

あなたは、コマンドラインでLPUSHを使用して行うことができますRedisのリストに、各ジョブ:

echo "lpush jobs job1" | redis-cli 

あなたは、あなたが望む、彼らはループ内で座っている場合、繰り返しやって並行して、1、またはそれ以上、労働者を開始することができますBLPOPのジョブ(ポップをブロックし、ジョブがあるまで待っています)をリストから外して処理します。

#!/bin/bash 
while :; do 
    job=$(echo brpop jobs 0 | redis_cli) 
    do $job 
done 

そして、削除と挿入を使用して作業者が実行されている間は、リストを変更する自由があります。

here

+0

私はこの考えが好きです。これは、キューを一連の番号付きファイルに保持する単純な自家製システムを含む、どのキューシステムにも適用できます。 – tripleee

関連する問題