내 스크립트가 주 작업을 진행하기 전에 내 스크립트가 의존하는 모든 비 POSIX 명령이 있는지 확인하려고합니다. 이렇게하면 나중에 스크립트가 누락 된 명령으로 인해 오류를 생성하지 않도록 할 수 있습니다.POSIX 셸에서 큰 따옴표로 묶은 문자열을 반복하는 방법은 무엇입니까?
모든 비 POSIX 명령의 목록을 DEPS
이라는 변수에 보관하여 스크립트가 발전하고 더 많은 명령에 의존하므로이 변수를 편집 할 수 있습니다.
스크립트가 공백이있는 명령을 지원하도록하고 싶습니다. my program
.
이것은 내 스크립트입니다. "my
및 program"
아래의 출력에서 볼 수 : "my program"
이 두 for
루프를 반복하면서 단어로 분리되어 있기 때문에
#!/bin/sh
DEPS='ssh scp "my program" sftp'
for i in $DEPS
do
echo "Checking $i ..."
if ! command -v "$i"
then
echo "Error: $i not found"
else
echo "Success: $i found"
fi
echo
done
그러나이 작동하지 않습니다.
# sh foo.sh
Checking ssh ...
/usr/bin/ssh
Success: ssh found
Checking scp ...
/usr/bin/scp
Success: scp found
Checking "my ...
Error: "my not found
Checking program" ...
Error: program" not found
Checking sftp ...
/usr/bin/sftp
Success: sftp found
내가 기대 출력은 다음과 같습니다 준수 스크립트 POSIX를 유지하면서
# sh foo.sh
Checking ssh ...
/usr/bin/ssh
Success: ssh found
Checking scp ...
/usr/bin/scp
Success: scp found
Checking my program ...
Error: my program not found
Checking sftp ...
/usr/bin/sftp
Success: sftp found
가 어떻게이 문제를 해결할 수 있습니까?
POSIX 쉘에서이 작업 BashFAQ 번호 50 주어진 모든 해답이에 지점이 질문에 대한 직접적이며, 일부 (명시 적으로 호출 아웃) POSIX 호환 예를 _does_ 동안 : HTTP : //이 mywiki .wooledge.org/BashFAQ/050 –
BTW, 이식성이 작업 1 일 경우'autoconf '를 사용하는 것이 좋지 않습니다. autoconf는 POSIX sh가 아닌 POSIX Bourne을 실행하는 플랫폼에서도 작동하도록 테스트됩니다. –