bash와 sh를 사용하여 스크립트를 실행하는 것의 차이점은 무엇입니까?

bash와 sh는 스크립트를 다르게 실행합니까? bash와 sh를 모두 사용하여 쉘 스크립트를 실행 한 결과 동일한 결과를 얻었습니다. 그렇다면 차이점은 무엇입니까?

또한 ./executable를 실행하면 bash 또는 sh를 사용합니까?

댓글

  • @Pandya $SHELL 변수는 ./executable를 해석 할 셸을 결정하는 데 사용되지 않습니다. 스크립트. ' 현재 쉘이 무엇인지 반드시 알려주지는 않습니다.
  • @jlliagre 오! 확인. wiki.debian.org 에는 " SHELL = 현재 쉘입니다. "
  • @Pandya 실제로는 " 사용자 '의 로그인 쉘 ". 현재 셸은 다를 수 있습니다.

답변

실행중인 시스템에 따라 다릅니다. 많은 OS, 특히 Linux 기반 OS 중 하나 인 shbash에 대한 링크입니다.

이 경우 bashsh를 호출 할 때 기존의 bourne 셸과 더 비슷해 지려고하지만 여전히 대부분의 바 시즘을 허용하는 동작의 일부 차이입니다.

Debian 기반 OS와 같은 다른 OS에서는 iv id = “가 아닌 dash에서 sh를 제공합니다. e34c827e9a “>

. dash는 깨끗한 POSIX 셸 구현으로 설계된 바 시즘을 지원하지 않기 때문에 훨씬 더 큰 차이를 만듭니다.

독점 OS에서 sh는 종종 dash와 같이 바 시즘을 구현하지 않는 POSIX 호환 ksh88에서 제공됩니다. Solaris 10 및 이전 버전에서는 PATH가 무엇인지에 따라 sh가 POSIX보다 앞선 레거시 Bourne 쉘이 될 가능성이 높습니다.

어쨌든, 스크립트가 bash 특정 명령, 옵션 또는 구문을 사용하지 않았기 때문에 테스트에서 동일한 결과를 얻을 수 있습니다.

, 기본적으로 실행되는 셸은 .executable 스크립트의 시작 부분에 작성된 shebang에 따라 다릅니다. shebang이 지정하면 bash가됩니다.

#!/bin/bash .... 

shebang이없고 스크립트를 호출하는 경우 POSIX 호환 셸에서 스크립트는 기술적으로 PATH에있는 첫 번째 sh에 의해 실행되어야합니다. bash, dashksh와 같은 많은 쉘 인터프리터는 자신을 POSIX로 간주하고 있습니다. 스크립트를 해석하십시오. 여기서는 SHELL 환경 변수가 사용되지 않습니다.

댓글

  • /bin에서 sh가 iv id =가 아닌 dash에 대한 심볼릭 링크임을 발견했습니다. “e34c827e9a”>

. 그래서 그들은 어떻게 똑같이 달렸습니까? ' 실제로 bash 스크립트 명령을 실행하지 않고 다른 패키지를 사용하는 터미널 명령 만 ' 도구를 실행했습니다.

  • 쉘 스크립트가 다른 명령을 순차적으로 호출하는 경우 모든 쉘 인터프리터는 동일한 결과로이를 실행합니다. 예상치 못한 것은 없습니다.
  • 이것은 질문과 관련이 없지만 ' bash의 차이점은 정확히 무엇입니까? 및 dash?
  • 둘 다 Bourne 쉘 구문을 사용하고 있습니다. 답장에서 썼 듯이 dash는 POSIX 셸 표준의 깨끗한 구현입니다. 반면에 bash는 상당히 많은 확장 기능과 비표준 기능이있는 셸입니다. 일부는 ksh, ksh93 및 기타 셸, bashisms로 알려진 일부 bash 특정. 주어진 셸 스크립트에서 엄격하게 이식 할 수없는 모든 것을 식별하는 데 도움이되는 checkbashisms라는 도구가 있습니다.
  • Answer

    예, 그럴 수 있지만 반드시 그럴 필요는 없습니다. 두 셸은 동일하지 않지만 기본은 호환됩니다. 자세한 내용은 이 게시물 을 확인하세요.

    스크립트에서 다음 줄을 사용하여 사용되는 인터프리터를 확인할 수 있습니다.

    ps h -p $$ -o args="" | cut -f1 -d" " 

    sheebang 행으로 스크립트가 직접 실행될 때 사용할 셸을 명시 적으로 지정할 수 있습니다.

    #!/bin/sh 

    또는

    #!/bin/bash 

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다