반드시 더 좋은 것은 아닙니다.
장점은 사용자의 첫 번째 실행 파일 #!/usr/bin/env python
을 모두 사용한다는 것입니다 .python
$PATH
단점 의는 #!/usr/bin/env python
그것이 무엇이든 사용하는 것입니다 python
사용자의에 처음 나타나는 실행 $PATH
.
이는 스크립트를 실행하는 사람에 따라 스크립트가 다르게 작동 할 수 있음을 의미합니다. 한 사용자의 /usr/bin/python
경우 OS와 함께 설치된 것을 사용할 수 있습니다 . 다른 경우에는 /home/phred/bin/python
제대로 작동하지 않는 실험 을 사용할 수 있습니다 .
만약 python
단지에 설치되어 /usr/local/bin
,이없는 사용자 /usr/local/bin
인은 $PATH
심지어 스크립트를 실행할 수 없습니다. (아마도 현대 시스템에서는 그럴 것 같지 않지만 더 모호한 통역사에게는 쉽게 발생할 수 있습니다.)
지정 #!/usr/bin/python
하면 특정 시스템 에서 스크립트를 실행하는 데 사용할 인터프리터를 정확하게 지정할 수 있습니다 .
또 다른 잠재적 인 문제는 #!/usr/bin/env
트릭 으로 인해 해석자가 인수를 전달할 수 없다는 것입니다 (암시 적으로 전달되는 스크립트 이름 이외). 이것은 일반적으로 문제가 아니지만 문제가 될 수 있습니다. 많은 Perl 스크립트는로 작성 #!/usr/bin/perl -w
되었지만 use warnings;
요즘에는 권장되는 대체 방법입니다. Csh 스크립트는 사용해야 #!/bin/csh -f
하지만 처음 에는 csh 스크립트가 권장되지 않습니다 . 그러나 다른 예가있을 수 있습니다.
개인 시스템 제어 시스템에 새 시스템에 계정을 설정할 때 설치하는 여러 Perl 스크립트가 있습니다. 내 스크립트를 #!
설치할 때 각 스크립트 의 줄 을 수정하는 설치 관리자 스크립트를 사용합니다 $HOME/bin
. (저는 #!/usr/bin/perl
최근에 다른 것을 사용할 필요가 없었습니다 . Perl이 기본적으로 설치되지 않은 때로 되돌아갑니다.)
사소한 요점 : #!/usr/bin/env
트릭은 아마도 env
이름이 암시하는 것처럼 변경된 환경에서 명령을 호출하기위한 명령 의 남용입니다 . 또한 일부 구형 시스템 (정확하게 리콜하면 SunOS 4 포함)에 env
명령 이 없었 습니다 /usr/bin
. 이들 중 어느 것도 중요한 문제가되지 않을 것입니다. env
이 방법으로 작동하면 많은 스크립트가 #!/usr/bin/env
트릭을 사용 하며 OS 제공 업체는이를 해결하기 위해 아무것도하지 않을 것입니다. 그것은 수도 당신이 당신의 스크립트가 정말 오래된 시스템에서 실행하려면,하지만 당신은 어쨌든 그것을 수정해야 할 가능성이있는 경우 문제가 될 수.
또 다른 가능한 문제는 의견에서 지적한 Sopalajo de Arrierez 덕분에 크론 작업이 제한된 환경에서 실행된다는 것입니다. 특히, $PATH
일반적으로 같은 것 /usr/bin:/bin
입니다. 따라서 인터프리터를 포함하는 디렉토리가 해당 디렉토리 중 하나에 있지 않으면 $PATH
사용자 쉘 의 기본값 에 있더라도 /usr/bin/env
트릭이 작동하지 않습니다. 정확한 경로를 지정하거나 crontab에 줄을 추가하여 설정할 수 있습니다 $PATH
( man 5 crontab
자세한 내용).