몇 가지 작업을 수행하는 스크립트가 있습니다.
- 목록 구성
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 {} +
이것 좀 봐우편 엽서참고용.