선호하는 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
'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 |