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

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

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

또한 방금 실행했을 때 ./executablebash 또는 sh를 사용했습니까?

답변1

이는 실행 중인 시스템에 따라 다릅니다. 많은 운영 체제, 특히 Linux 기반 운영 체제 sh에는 bash.

이 경우 동작에는 여전히 약간의 차이가 있습니다. bash호출할 때 전통적인 Bourne 쉘과 더 비슷해지려고 노력 sh하지만 여전히 대부분의 bashism을 허용합니다.

Debian 기반 운영 체제와 같은 일부 다른 운영 체제에서는 대신 sh제공 됩니다 . 이는 bashism을 지원하지 않고 깔끔한 POSIX 쉘 구현으로 설계되었기 때문에 더 큰 차이를 만듭니다 .dashbashdash

예를 들어 sh일반적으로 POSIX 준수에 의해 제공되는 독점 운영 체제에서는 bashism이 구현되지 않습니다. Solaris 10 이하에서는 PATH에 따라 이는 POSIX 이전 Bourne 셸일 수 있습니다.ksh88dashsh

bash그럼에도 불구하고 스크립트가 특정 명령, 옵션 또는 구문을 사용하지 않기 때문에 테스트와 동일한 출력을 얻을 수 있습니다 .

를 실행할 때 ./executable어떤 쉘이 실행될지는 기본적으로 .executable 스크립트 시작 부분에 작성된 shebang에 따라 달라집니다. bashshebang이 이를 지정하는 경우:

#!/bin/bash
....

Shebang이 없고 POSIX 호환 셸에서 스크립트를 호출하는 경우 기술적으로 스크립트는 shPATH에 있는 첫 번째 스크립트에 의해 실행되어야 합니다. 많은 쉘 인터프리터는 POSIX를 좋아 bash하고 고려 dash하여 ksh스크립트를 해석합니다. 여기서는 SHELL환경 변수가 사용되지 않습니다.

답변2

예, 그럴 수 있지만 반드시 그럴 필요는 없습니다. 두 쉘은 서로 다르지만 기본적으로 호환됩니다. 확인하다이 게시물자세한 내용은.

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

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

다음 줄을 사용하여 스크립트를 직접 실행할 때 사용해야 하는 셸을 명시적으로 지정할 수 있습니다 sheebang.

#!/bin/sh

또는

#!/bin/bash

관련 정보