bash와 sh는 스크립트를 다르게 실행합니까? bash와 sh를 모두 사용하여 쉘 스크립트를 실행 한 결과 동일한 결과를 얻었습니다. 그렇다면 차이점은 무엇입니까?
또한 ./executable
를 실행하면 bash 또는 sh를 사용합니까?
댓글
답변
실행중인 시스템에 따라 다릅니다. 많은 OS, 특히 Linux 기반 OS 중 하나 인 sh
는 bash
에 대한 링크입니다.
이 경우 bash
가 sh
를 호출 할 때 기존의 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
, dash
및 ksh
와 같은 많은 쉘 인터프리터는 자신을 POSIX로 간주하고 있습니다. 스크립트를 해석하십시오. 여기서는 SHELL
환경 변수가 사용되지 않습니다.
댓글
-
/bin
에서sh
가 iv id =가 아닌dash
에 대한 심볼릭 링크임을 발견했습니다. “e34c827e9a”>
. 그래서 그들은 어떻게 똑같이 달렸습니까? ' 실제로 bash 스크립트 명령을 실행하지 않고 다른 패키지를 사용하는 터미널 명령 만 ' 도구를 실행했습니다.
bash
의 차이점은 정확히 무엇입니까? 및 dash
? dash
는 POSIX 셸 표준의 깨끗한 구현입니다. 반면에 bash
는 상당히 많은 확장 기능과 비표준 기능이있는 셸입니다. 일부는 ksh
, ksh93
및 기타 셸, bashisms로 알려진 일부 bash 특정. 주어진 셸 스크립트에서 엄격하게 이식 할 수없는 모든 것을 식별하는 데 도움이되는 checkbashisms라는 도구가 있습니다. Answer
예, 그럴 수 있지만 반드시 그럴 필요는 없습니다. 두 셸은 동일하지 않지만 기본은 호환됩니다. 자세한 내용은 이 게시물 을 확인하세요.
스크립트에서 다음 줄을 사용하여 사용되는 인터프리터를 확인할 수 있습니다.
ps h -p $$ -o args="" | cut -f1 -d" "
sheebang
행으로 스크립트가 직접 실행될 때 사용할 셸을 명시 적으로 지정할 수 있습니다.
#!/bin/sh
또는
#!/bin/bash
$SHELL
변수는./executable
를 해석 할 셸을 결정하는 데 사용되지 않습니다. 스크립트. ' 현재 쉘이 무엇인지 반드시 알려주지는 않습니다.