구문 오류로 인해 bin/sh 스크립트가 실패함: 예기치 않은 리디렉션

구문 오류로 인해 bin/sh 스크립트가 실패함: 예기치 않은 리디렉션

이제 시스템 셸을 사용하여 실행되도록 다음 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와 호환됩니다.

관련 정보