답변:
표준 위치에 설치된 지정된 운영체제의 시스템 설치 버전을 사용하려면 직접 경로를 사용하십시오. 사용자의 첫 번째 버전에 인터프리터 버전을 $PATH
사용하려면을 사용하십시오 #!/usr/bin/env ...
.
이 env
명령은 지정된 명령을 호출하여 환경 변수를 설정하거나 설정 해제 할 수 있습니다.
env FOO=BAR do-something
env DISPLAY=:0.0 xterm -ls &
환경 변수 나 다른 옵션을 지정하지 않으면 명명 된 명령 만 호출됩니다. (이 방법을 사용하는 것은 약간의 해킹 일 것입니다.)
shebang을 다음과 같이 쓰는 목적
#!/usr/bin/env interp
interp
에서 처음 나타나는 것을 호출하는 것 입니다 $PATH
.
즉, 스크립트를 작성할 때 정확히 어디에 있는지 interp
(예 /bin
: /usr/bin
, 또는 에있을 수 있는지) 알 필요가 없습니다 /usr/local/bin
. 물론 당신은 알고 있나요 env
이다 /usr/bin/env
, 그러나 그것은 합리적으로 보편적 인 것 같다.
장점은 어떤 버전의 인터프리터가 사용자의 첫 번째 버전에 나타나는지를 호출한다는 것 $PATH
입니다. 단점은 인터프리터의 그것을 원용하는 중 버전은 사용자의에 처음 나타나는 것입니다 $PATH
.
예를 들어, 와 perl
같이 내 홈 디렉토리에 개인 빌드를 설치했으며 내 앞에 있습니다. shebang이있는 스크립트를 실행하면$HOME/bin/perl
$HOME/bin
$PATH
#!/usr/bin/env perl
그런 다음 설치된 자체 perl
실행 파일로 실행됩니다. 좋지 않을 수도 있습니다. 스크립트의 저자는 아마도 한 달 전에 소스에서 빌드 한 최첨단 Perl로 테스트하지 않았을 것입니다.
대부분의 시스템 ( /usr/bin/perl
및 /bin/bash
각각)에서 일관된 위치에 설치 될 가능성이있는 Perl 또는 Bash와 같은 경우 에는 명령의 직접 경로를 사용합니다. 다른 시스템에 다르게 설치 될 수있는 더 모호한 무언가를 위해, /usr/bin/env
트릭을 사용 하거나 스크립트가 설치 될 때 shebang 라인을 조정하는 설치 프로그램을 작성합니다. (저는 Perl 스크립트를 위해 그렇게해야했습니다.)
업데이트 : 난에 좀 더 자세히 갔어요 이 답변 에 이 질문에 온 유닉스 및 리눅스 사이트 .
#!/usr/bin/perl
하고 사용 use strict; use warnings;
하는 것이 일반적 #!/usr/bin/perl -w
입니다. 그러나 -T
세방에 있어야합니다.
#!
라인 처리는 사용하지 않습니다 $PATH
. 인터프리터의 경로를 지정해야합니다. (적어도 내 시스템에서는 상대 경로가 될 수 있지만 거의 유용하지 않다는 것을 깨달았습니다.)
가장 좋은 방법은 다음과 같습니다.
#!/usr/bin/env bash
#!/usr/bin/env sh
#!/usr/bin/env python
등등...
우분투가 처음으로 대시를 사용하기 시작했을 때 일부 스크립트가 손상되었습니다. 그것에 대한 토론이있었습니다. #!/bin/sh
/ bin / bash에 대한 링크 인 대부분의 스크립트가 작성 되었습니다. 합의는 이렇습니다 : 스크립트 작성자는 통역사를 지정해야합니다. 따라서 스크립트를 항상 BASH와 함께 호출해야하는 경우 환경에서 스크립트를 지정하십시오. 이것은 유닉스 / 리눅스 시스템마다 다른 경로를 추측 할 필요가 없습니다. 또한 내일 / bin / sh가 / bin / wthsh와 같은 다른 쉘 또는 다른 비음으로 연결되는 링크가되면 작동합니다.
#!/bin/bash
. 나는 스크립트 작가가 인터프리터를 지정하기위한 책임이 있다고 동의하지만 방법은 모든 것을 당신이 비난 쉬하지 bash는 말할 필요하다면
참고로 Shee-Bang #!
이 필요합니다 #
. 이 행을 사용하여 스크립트를 실행할 인터프리터를 식별하십시오.
기본적으로 우분투 /bin/sh
는 대시로 연결 됩니다
대시에 대해 알고 싶은 정도와 시스템 또는 데몬 셸에 대시가 사용되는 이유에 따라 다음을 참조하십시오.
Bash는 대부분의 Linux 사용자가 사용하는 기본 셸이며 대시와 다른 기능이 있습니다. bash 용으로 작성된 스크립트는 대시로 실행할 경우 제대로 실행되거나 실행되지 않을 수 있습니다. 스크립트가 복잡할수록 스크립트가 실행될 가능성이 줄어 듭니다.
perl, python 등으로 작성된 스크립트는 /bin/sh
또는로 전혀 실행되지 않습니다 /bin/bash
.
스크립트를 작성할 때 시방에 어떤 인터프리터를 사용해야하는지 식별합니다
무엇을 사용해야할지 선택하는 것은 스크립트 작성자에 의해 이루어지며 하나는 다른 것보다 낫지 않으며 모두 다양한 기능, 장점 및 단점이 있습니다.