programing

선호하는 바시쉐방("#!")은 무엇입니까?

testmans 2023. 5. 10. 20:32
반응형

선호하는 바시쉐방("#!")은 무엇입니까?

있습니까?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

를 꼭 보세요.manbash:

man bash

그리고.env:

man env

및 데비안 시스템에서는 : 분투와같및데기는시반서에스템안비데고안은비▁note는서,에스▁deb.sh 되어 있습니다.dash것은 아니다.bash모든 시스템 스크립트가 사용하는 것처럼shDebian에 따르면 이를 통해 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

반응형