선호하는 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
( bash
is /data/data/com.termux/files/usr/bin/bash
)가 없지만 #!/bin/bash
.
bash 스크립트를 작성하는 방법에 따라 다릅니다. 귀하의 경우 /bin/sh
IS가 떠들썩한 파티에 심볼릭 링크 배쉬는 다음과 같이 호출 될 때, sh
, 일부 기능을 사용할 수 없습니다 .
bash 특정 비 POSIX 기능을 원하면 다음을 사용하십시오. #!/bin/bash
참고 URL : https://stackoverflow.com/questions/10376206/what-is-the-preferred-bash-shebang
'Program Tip' 카테고리의 다른 글
사용자 지정 HTTP 헤더 : 명명 규칙 (0) | 2020.09.27 |
---|---|
Vim에서 remap, noremap, nnoremap 및 vnoremap 매핑 명령의 차이점은 무엇입니까? (0) | 2020.09.27 |
그룹화 된 UITableView 헤더의 높이를 변경하는 방법은 무엇입니까? (0) | 2020.09.25 |
자바에서 '외부'IP 주소 얻기 (0) | 2020.09.25 |
Xcode의 Organizer에서 앱을 제거하려면 어떻게해야합니까? (0) | 2020.09.25 |