Grep は作業ディレクトリにファイル名を挿入します。

Grep は作業ディレクトリにファイル名を挿入します。

いくつかのタスクを実行するスクリプトがあります。

  • XMLリストの構成
  • そのうちXML一致するものをリストしてください。
  • そのゲームが何であるかを見せてください。
JENKINS_HOME=/var/lib/jenkins

_ALL_JOBS=$( find $JENKINS_HOME/jobs -name config.xml )

_CRON_JOBS=$( for _JOB in $( echo "$_ALL_JOBS" ); do grep -l 'triggers.TimerTrigger' $_JOB; done )

for _JOB in $( echo "$_CRON_JOBS" ); do
    _TIME_TRIGGER=$( grep -A 1 'hudson.triggers.TimerTrigger' $_JOB | head -2 | tail -1 )
    echo ${_JOB}: $_TIME_TRIGGER
done

$_ALL_JOBSそれは次のとおりです。

/var/lib/jenkins/jobs/Testing/jobs/job1/config.xml
/var/lib/jenkins/jobs/Testing/jobs/job2/config.xml
/var/lib/jenkins/jobs/Testing/jobs/job3/config.xml
/var/lib/jenkins/jobs/Testing/jobs/job4/config.xml
/var/lib/jenkins/jobs/Testing/jobs/job5/config.xml

$_CRON_JOBSオプションで、$_ALL_JOBS次のようになります。

/var/lib/jenkins/jobs/Testing/jobs/job2/config.xml
/var/lib/jenkins/jobs/Testing/jobs/job4/config.xml
/var/lib/jenkins/jobs/Testing/jobs/job5/config.xml

これらのファイルのいずれかのコマンドラインからGREPを実行すると、次の結果が表示されます。<spec>H 1 * * *</spec>

ループ内の各ファイルに対して同じコマンドを実行すると、次の結果が表示されます。追加する現在作業中のディレクトリの内容:

<spec>H */6 file1 file2 file3 file4 file5*</spec>

別の作業ディレクトリに変更してスクリプトを実行すると、同じ結果が得られますが、XMLタグ間に表示されるファイルは新しい作業ディレクトリ用です。

<spec>H */6 file6 file7 file8 file9 file10*</spec>

現在の作業ディレクトリの内容が一致に含まれるようにするループまたは一致がありますか?

どんなアイデアもありがとうございます。

ベストアンサー1

次の例を試してください。

$ mkdir -p test_dir && cd test_dir/
$ touch file1 file2
$ time_trigger='<spec>H 1 * * *</spec>'

$ echo "$time_trigger"
<spec>H 1 * * *</spec>

$ echo $time_trigger
<spec>H 1 file1 file2 file1 file2 *</spec>

出力は引用符のない変数の結果であり、一部のアスタリスクは現在のディレクトリのファイルに展開されます。

echoこれを修正した後もファイル名にスペースが含まれている場合、印刷変数を使用しないでください。この出力を変数に再割り当てするなど、コードの一部が失敗する可能性があるため、脆弱です。


可能なスクリプトのバージョンは次のとおりです。

find "$JENKINS_HOME"/jobs -name 'config.xml' -exec sh -c '
    for f do
        <apply your logic for every config file "$f">
    done' sh {} +

これを見て郵便はがき参考用。

おすすめ記事