리눅스 기초 질문
쉘 스크립트를 작성하면 맨 처음으로 이런 걸 쓰게되는데
#! /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에서는 에러를 발생합니다.