리눅스 기초 질문

쉘 스크립트를 작성하면 맨 처음으로 이런 걸 쓰게되는데

#! /bin/sh 과 #! /bin/bash

이 둘의 차이점이 뭔가요?



✅최고의 답변✅

리눅스 쉘에는 여러 종류가 있습니다.

가장 대표적인게 본어게인쉘 bash, c쉘 csh, z쉘 zsh, 우분투나 데비안에서 잘 쓰고있는 dash...

꽤 많은 종류가 있습니다.

sh는 사용자 환경에 따라 이런 쉘들과 연결되어 있습니다. 운영체제나 버전에 따라서 달라질 수 있단 말이죠.

확인은

$ ls -al /bin/sh

하면 나옵니다. 우분투의 경우라면

$ ls -al /bin/sh

.......... /bin/sh -> dash

와 같은 결과를 확인할 수 있습니다.

그러니 /bin/bash 라고 할 경우에는 배쉬쉘에서 실행하겠다.

/bin/sh 라고 한 경우에는 환경에서 연결한 쉘에서 실행하겠다. 라는 뜻입니다.

-----

유닉스에서 POSIX라는 표준이 있는데 이 표준을 따르는게 본쉘(Bourne Shell) 입니다. 이걸 쉘이라고 불렀습니다. 원래는 이게 /bin/sh 가 되는게 맞습니다.

이후에 이걸 기능확장시켜서 만들어진 본어게인쉘(Bourne Again Shell)이 나오는데 확장되면서 표준을 좀 벗어나게 됩니다. 기능은 많아졌죠.

요즘의 대부분리눅스는 이 bash를 다 가지고 있습니다. 물론 다른 쉘도 가지고 있거나 설치 가능합니다. 그래서인지 요즘은 /bin/sh 이 이런쉘에 링크가 되어 있더군요.

다만 배쉬에 링크되는 이 sh 는 아마도 'bash -posix' 라는 옵션이 붙는걸로 보입니다. 스위칭 기능으로 인해, 이렇게 되면 베쉬쉘이 본쉘로 동작하게 됩니다.

-----

길게 썼습니다만 간단히 말하면

유닉스 표준쉘: sh

확장기능이 포함됨 쉘: bash

라고 생각하면 되겠습니다. 실제 일부 스크립트는 /bin/bash 에서 잘 동작하지만 /bin/sh에서는 에러를 발생합니다.

질문과 답변을 친구들과 공유하세요.