선호하는 바시쉐방("#!")은 무엇입니까?
있습니까?Bash
대부분의 용도에서 shebang이 다른 것들보다 객관적으로 더 낫습니까?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
- 기타
저는 오래 전에 누군가가 대시를 끝에 추가하면 스크립트에 명령을 전달할 수 없다는 말을 들은 것을 어렴풋이 기억합니다. 하지만 그에 대한 자세한 내용은 찾을 수 없습니다.
휴대성을 위해 사용해야 합니다. 다른 *nixes putbash
다른 장소에서, 그리고 사용./usr/bin/env
첫 번째 실행을 위한 해결 방법입니다.bash
에 있는PATH
그리고 아닙니다.
다음을 사용하는 것이 좋습니다.
#!/bin/bash
100% 휴대가 가능하지 않습니다(일부 시스템 위치).bash
이외의 장소에서/bin
), 하지만 많은 기존 스크립트가 사용한다는 사실.#!/bin/bash
다양한 운영 체제에 압력을 가합니다./bin/bash
적어도 주요 위치에 대한 심볼릭 링크.
다음의 대안:
#!/usr/bin/env bash
제안되었습니다. 하지만 그것이 가능하다는 보장은 없습니다.env
명령 위치/usr/bin
(시스템을 사용해 본 적이 있습니다.)또한 이 양식은 다음의 첫 번째 인스턴스를 사용합니다.bash
현재 사용자에서$PATH
적절한 버전의 bash 셸이 아닐 수 있습니다.
(하지만/usr/bin/env
어느 쪽이든 합리적으로 현대적인 시스템에서 작동해야 합니다.env
안에 있습니다./usr/bin
또는 시스템이 작동하도록 무언가를 하기 때문입니다.위에서 언급한 시스템은 SunOS 4로, 아마 25년 동안 사용하지 않았을 것입니다.)
다음이 없는 시스템에서 실행할 스크립트가 필요한 경우/bin/bash
올바른 위치를 가리키도록 스크립트를 수정할 수 있습니다(물론 불편함이 있음).
저는 이 질문에 대한 답변에서 트레이드오프에 대해 더 깊이 있게 논의했습니다.
다소 모호한 업데이트:Android에서 실행되는 데스크톱 리눅스와 유사한 계층인 Termux에는 내가 사용하는 시스템 중 하나가 없습니다./bin/bash
(bash
이라/data/data/com.termux/files/usr/bin/bash
) -- 하지만 지원해야 할 특별한 처리가 있습니다.#!/bin/bash
.
/bin/sh
일반적으로 시스템의 기본 셸에 대한 링크이며, 이는 종종bash
하지만, 예를 들어, 데비안 시스템은 더 가벼운 무게입니다.dash
어느 쪽이든, 원래 본 쉘은sh
그래서 만약 당신의 스크립트가 약간을 사용한다면.bash
(2세대, "Bourne Againsh") 특정 기능 ([[ ]]
테스트, 배열, 다양한 설탕이 든 것 등), 그러면 당신은 더 구체적이고 나중에 사용해야 합니다.이렇게 하면 bash가 설치되지 않은 시스템에서 스크립트가 실행되지 않습니다.이 진화에 대한 흥미로운 3부작이 있을 수도 있다는 것을 알고 있습니다하지만 그것은 소문일 수도 있습니다.
또한다음과같환경우기될이▁ev▁으로 환기될 때 하십시오.sh
,bash
어느 정도는 POSIX 표준으로 작동합니다. sh
(이에 대한 GNU 문서 참조).
셰방 라인을 사용하여 적절한 인터프리터를 호출하는 것은 BASH만을 위한 것이 아닙니다.당신은 펄, 파이썬, PHP(CLI) 등 당신의 시스템에 있는 모든 통역 언어에 대해 셰방을 사용할 수 있습니다.그건 그렇고, 쉐방은
#!/bin/sh -
(즉, 두 개의 대시가 될 수도 있습니다.--
) end bash 옵션을 지정하면 이후의 모든 항목이 파일 이름 및 인수로 처리됩니다.
env
가능하게 사용자 할 수 가능 는 명령을사스수에대트사한크용지자정환다합설니휴로를 사용해야 .
#!/usr/bin/env bash
또는 Perl과 같은 언어에 대해
#!/usr/bin/env perl
를 꼭 보세요.man
의 bash
:
man bash
그리고.env
:
man env
및 데비안 시스템에서는 : 분투와같및데기는시반서에스템안비데고안은비▁note는서,에스▁deb.sh
되어 있습니다.dash
것은 아니다.bash
모든 시스템 스크립트가 사용하는 것처럼sh
Debian에 따르면 이를 통해 bash가 증가하고 시스템이 안정적으로 유지될 수 있습니다.
또한 호출 *nix를 유지하기 위해 shebang 호출된 스크립트에서 파일 확장자를 사용하지 않습니다. Windows에서처럼 실행 파일에서 호출 시 확장자를 생략할 수 없기 때문입니다.file 명령은 스크립트로 식별할 수 있습니다.
스크립트를 쓰느냐에 . bash 스성방는법따라다릅다니에하작를크트립▁it다니릅다▁onb▁depends따.만약 당신이/bin/sh
가 bash로 bash와 됩니다.sh
일부 기능을 사용할 수 없습니다.
관련 비기능을 하려면 Bash "POSIX"를 합니다.#!/bin/bash
#!/bin/sh
대부분의 스크립트에는 특정 bash 기능이 필요하지 않으므로 sh를 위해 작성해야 합니다.
또한 기본적으로 BSD에 bash가 없는 BSD에서 스크립트가 작동합니다.
언급URL : https://stackoverflow.com/questions/10376206/what-is-the-preferred-bash-shebang
'programing' 카테고리의 다른 글
Azure WebJobsDashboard 연결 문자열 정보는 어디서 얻을 수 있습니까? (0) | 2023.05.15 |
---|---|
WPF에 기본()이 없습니까? (0) | 2023.05.10 |
작업이 시간 초과와 함께 완료될 때까지 비동기적으로 대기 (0) | 2023.05.10 |
.NET - 프로토콜, 호스트 및 포트 가져오기 (0) | 2023.05.10 |
좋은 질문입니다.NET 개발자는 대답할 수 있어야 합니까? (0) | 2023.05.10 |