Program Tip

선호하는 Bash shebang은 무엇입니까?

programtip 2020. 9. 27. 13:44
반응형

선호하는 Bash shebang은 무엇입니까?


어떤 거기에 Bash오두막 객관적으로 더 나은 대부분의 용도에 대한 다른 사람보다?

  • #!/usr/bin/env bash
  • #!/bin/bash
  • #!/bin/sh
  • #!/bin/sh -
  • 기타

나는 아주 오래 전에 끝에 대시를 추가하면 누군가가 당신의 스크립트에 명령을 전달하는 것을 막는다는 말을 들었다는 것을 막연하게 기억합니다. 그러나 그것에 대한 세부 사항은 찾을 수 없습니다.


당신은 사용해야 #!/usr/bin/env bash에 대한 휴대 : 넣어 다른 *의 nixes도 bash다른 장소에서, 그리고 사용은 /usr/bin/env처음 실행하는 해결 방법입니다 bash온 FOUND을 PATH. 그리고 sh아닙니다bash .


/bin/sh일반적으로 시스템의 기본 셸에 대한 링크이며, 자주 사용 bash되지만 예를 들어 Debian 시스템이 더 가벼운 것 dash입니다. 어느 쪽이든 원래 Bourne 셸은 sh이므로 스크립트에서 일부 bash(2 세대, "Bourne Again sh") 특정 기능 ( [[ ]]테스트, 배열, 다양한 설탕 같은 것 등)을 사용하는 경우 더 구체적이고 나중에 사용해야합니다. . 이렇게하면 bash가 설치되지 않은 시스템에서 스크립트가 실행되지 않습니다. 나는이 진화에 관한 흥미 진진한 영화 3 부작이있을 수 있음을 이해한다. 그러나 그것은 소문 일 수있다.

또한으로 유발하는 경우주의 sh, bash어느 정도에 POSIX 표준으로 동작합니다 sh (참조 는 GNU 문서 이 약을).


shebang 라인을 사용하여 적절한 인터프리터를 호출하는 것은 BASH만을위한 것이 아닙니다. Perl, Python, PHP (CLI) 및 기타 여러 시스템에서 번역 된 언어에 대해 shebang을 사용할 수 있습니다. 그건 그렇고, shebang

#!/bin/sh -

(또한 두 개의 대시가 될 수 있습니다. 즉 --) bash 옵션 종료 이후의 모든 것은 파일 이름과 인수로 처리됩니다.

env명령을 사용하면 스크립트를 이식 가능하게 만들고 스크립트에 대한 사용자 지정 환경을 설정할 수 있으므로 이식 가능한 스크립트는

#!/usr/bin/env bash

또는 Perl과 같은 언어가 무엇이든

#!/usr/bin/env perl

다음에 대한 man페이지를 확인하십시오 bash.

man bash

env:

man env

참고 :에 데비안 데비안 기반의 시스템은 우분투처럼 sh연결되어 dash없습니다 bash. 모든 시스템 스크립트가 sh. 데비안에 따르면 이것은 bash가 성장하고 시스템이 안정적으로 유지되도록합니다.

또한 Windows에서와 같이 실행 파일에 대한 호출에서 확장명을 생략 할 수 없기 때문에 shebang 호출 된 스크립트에 파일 확장명을 사용하지 않는 것처럼 호출 * nix를 유지합니다. file 명령은이를 스크립트로 식별 할 수 있습니다.


다음을 사용하는 것이 좋습니다.

#!/bin/bash

100 % 이식 가능한 것은 아니지만 (일부 시스템은를 bash제외한 다른 위치 /bin에 배치됨) 기존 스크립트의 대부분이 #!/bin/bash다양한 운영 체제를 사용 /bin/bash하여 최소한 기본 위치에 대한 심볼릭 링크를 만들도록 압력을가 합니다.

대안 :

#!/usr/bin/env bash

제안되었지만 env명령이 있다는 보장은 없습니다 /usr/bin(그리고 그렇지 않은 시스템을 사용했습니다). 또한이 양식은 bash현재 사용자 의 첫 번째 인스턴스를 사용 $PATH하므로 bash 셸의 적합한 버전이 아닐 수 있습니다.

이없는 시스템에서 스크립트를 실행해야하는 경우 /bin/bash올바른 위치를 가리 키도록 스크립트를 수정할 수 있습니다 ( 당연히 불편 함).

나는에 더 깊이 장단점을 논의했습니다 내 대답이 질문에 .

다소 모호한 업데이트 : 내가 사용하는 시스템 중 하나 인 Termux , Android에서 실행되는 데스크톱 Linux와 유사한 레이어에는 /bin/bash( bashis /data/data/com.termux/files/usr/bin/bash)가 없지만 #!/bin/bash.


bash 스크립트를 작성하는 방법에 따라 다릅니다. 귀하의 경우 /bin/shIS가 떠들썩한 파티에 심볼릭 링크 배쉬는 다음과 같이 호출 될 때, sh, 일부 기능을 사용할 수 없습니다 .

bash 특정 비 POSIX 기능을 원하면 다음을 사용하십시오. #!/bin/bash

참고 URL : https://stackoverflow.com/questions/10376206/what-is-the-preferred-bash-shebang

반응형