set
쉘의 동작이 수정될 수 있어 예측할 수 없는 경우 쉘 스크립트를 배포하는 가장 올바른 방법은 무엇입니까?
예를 들어 실행 환경 rm *.txt
에서는 예상대로 작동하지 않습니다 . 모든 환경에서 현재 디렉터리의 모든 텍스트 파일이 삭제되었는지 set -f
어떻게 확인해야 합니까 ?rm *.txt
일반 배포 전에 쉘 스크립트가 예상대로 실행되는지 어떻게 확인해야 합니까?
답변1
쉘 스크립트는 일반적으로 바이너리 파일, Python 스크립트, Perl 스크립트 또는 기타 유형의 스크립트와 같은 다른 유형의 실행 파일과 동일한 것으로 간주됩니다. 그들은셰르본맨 위에는 쉘을 통해 실행하도록 커널에 지시합니다. 다른 명령처럼 호출해야 합니다.
따라서 스크립트가 호출될 때마다 새 셸이 시작되며 set -f
호출 셸이나 시스템의 다른 셸 인스턴스에 있는 모든 설정은 관련이 없습니다.
물론 사용자는 다음과 같이 스크립트를 실행하는 대신 스크립트를 가져올 수 있습니다.
. /path/to/your/script
또는 다음과 같이 기본 설정이 아닌 설정을 사용하여 셸에서 실행합니다.
sh -f /path/to/your/script
그러나 이는 일반적인 방법이나 스크립트 호출로 간주되지 않으며, 이를 수행하는 사용자는 얻을 수 있는 결과를 기대해야 합니다.
실행보다는 가져오도록 설계된 일부 스크립트가 있습니다. 그 목적은 소스 셸 환경에 반영되어야 하는 cwd를 변경하거나 환경 변수를 설정하는 것이기 때문입니다. 그러나 이는 소수에 불과하며 일반적으로 다음 작업의 일부로 수행됩니다. 합의된 프로토콜. 이러한 파일은 독립 실행형 스크립트라기보다는 해당 파일이 생성될 것으로 예상되는 시스템에 대한 "플러그인"과 더 유사하다고 생각할 수 있습니다. 예를 으로/etc/rc*.d
이름이들어.sh
/etc/rc*.d
이러한 방식으로 얻으려는 파일은 호출자 환경에 쉘의 동작에 영향을 미칠 수 있는 설정이 무엇인지 알고 있어야 하지만 이상적으로는 합의된 프로토콜이 예측 가능한 실행 환경을 약속해야 합니다.