이제 시스템 셸을 사용하여 실행되도록 다음 bash 스크립트를 변환하려고 합니다.
1 #!/bin/sh
2 #testtotal
3 lines="$(crontab -l | awk '{if(NR>2)print}')"
4 echo "1..$lines"
5 counter=1
6 while read p; do
7 if [[ -x "$p" ]]
8 then
9 echo "ok $counter - $p is executable"
10 else
11 echo "not ok $counter - $p is not executable or found"
12 fi
13 counter=$((counter+1))
14 done < <(crontab -l | awk '{if(NR>2)print}' | awk '{print $6}')
"sh"를 사용하여 실행하면 다음 오류와 함께 실패합니다.
ctest: line 14: syntax error: unexpected redirection
bin/sh에서 실행되도록 조정하는 방법을 알려주실 수 있나요?
답변1
[[ ... ]]
당신이 원하는 것 대신에 7번째 줄에서 [ ... ]
또는 test ...
(반드시언제나, 언제나, 언제나각 변수를 참조하세요. 이미 이 작업을 수행 [
했지만아니요선택 사항이며 다른 사람들을 위해 반복할 가치가 있음).
if [ -x "$p" ]
14행에서 다음 문서를 사용하여 프로세스 대체를 명령 대체로 바꿀 수 있습니다.
done <<EOF
$(crontab -l | awk 'NR > 2 { print $6 }')
EOF
이렇게 하면 while read p
서브셸로의 파이프로 인해 서브셸에서 루프가 실행되는 것을 방지할 수 있으므로 변수가 보존됩니다.
이렇게 하면 POSIX와 호환됩니다.