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 {} +

이것 좀 봐우편 엽서참고용.

관련 정보