나는 내가 /bin/sh
선택한 껍질에 대한 상징물 이라고 생각했다 . 나는 항상을 사용 bash
했으므로을 /bin/sh
가리킨다 고 생각했다 /bin/bash
. 그러나을 가리키는 것으로 밝혀졌습니다 /bin/dash
.
더 재미 있어요. 시작 dash
하고 수행 echo $SHELL
하면 인쇄됩니다 /bin/bash
(기본적으로 동일합니까?). 그러나의 맨 페이지는 맨 페이지와 dash
완전히 다릅니다 bash
(따라서 동일 하지 않습니까?).
답변
데비안과 우분투는 몇 가지 이유로 대시 (iirc)로 전환했습니다. 우선, Bash는 수년에 걸쳐 커졌습니다. 사실, /bin/bash
Ubuntu 8.04 시스템 의 바이너리는 거의 10 배 (!) /bin/dash
입니다. 이제는 매일 쉘을 사용하는 데별로 중요하지 않지만 다음 상황에서는 중요합니다.
- 대시는 훨씬 작아서 더 빨리로드되므로 init 스크립트에 도움이됩니다. 매번 Bash 대신 Dash를로드하면 많은 것을 시작 해야하는 경우 작업 속도가 상당히 빨라집니다.
- 데쉬와 우분투는 Dash의 크기가 더 작기 때문에 initrd 크기의 상당히 큰 덩어리를 깎을 수있어 다른 것들을위한 더 많은 공간을 남길 수 있습니다.
스크립팅에 Bash 대신 Dash를 사용하는 단점은 많은 사람들이 Bash 만 가지고있는 소위 Bashisms 라는 구문 적 장점을 사용한다는 것 입니다. Bashism의 예는 다음과 같은 하위 문자열입니다.
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
이:
echo ${a#123}
4567890
반면 Dash는 주로 POSIX 호환 (및 그 이상)을 목표로하며,이 작업 을 시도하면 나쁜 Substition 오류가 발생합니다.
echo $SHELL
/bin/dash
# actually, it will read /bin/bash above, because if you just run dash
# it will not set the $SHELL variable :)
a=1234567890
echo ${a}
1234567890
echo ${a:3}
dash: Bad substitution
이것은 쉘 스크립트의 인터프리터로 /bin/sh
(및 dash
)를 사용하고 그 안에 Bashism을 사용하는 경우 중요합니다. 데비안과 우분투에는 Bashisms에 대한 훌륭한 위키 페이지가 있으며 일반적으로 쉘 스크립트와 특히 init 스크립트가 나쁜 이유가 있습니다. 따라서 의식적으로 당신이 필요로하는 여부를 선택해야합니다 /bin/sh
또는 /bin/bash
당신의 스크립트 인터프리터있다.
대시는 시스템에서 기본 쉘로 사용되지 않아야합니다. Bash를 사용하십시오. 스크립트의 이식성을 위해 Dash를 인터프리터로 사용하여 다른 Linux 버전 및 Unix에서 스크립트가 실행될 확률을 높일 수 있습니다.
답변
여기를 살펴보십시오 : https://wiki.ubuntu.com/DashAsBinSh 아마도 도움이 될 것입니다.
답변
dash는 가벼운 bash 대체품으로, 몇 년 전에 변경된 우분투를 사용한다고 가정합니다.
하지만 너무 좋지는 않습니다.
http://forums.debian.net/viewtopic.php?f=20&t=45116
답변
$SHELL
실행할 때 모든 쉘이 설정 되는 것은 아니므로 다음을 사용하여 현재 쉘을 찾으십시오.
echo $0
오류가 발생하면 csh입니다. 그렇지 않으면 argv[0]
호출 된 것입니다. 이것은 일반적으로 쉘이며 아마도 -
하이픈이있는 것으로 로그인 쉘임을 나타냅니다.
호출 프로세스의 제어를 받기 때문에 이것이 보장 되지는 않지만 argv[0]
실제로 가장 안정적인 접근 방식입니다.