/ bin / dash는 무엇입니까?


27

나는 내가 /bin/sh선택한 껍질에 대한 상징물 이라고 생각했다 . 나는 항상을 사용 bash했으므로을 /bin/sh가리킨다 고 생각했다 /bin/bash. 그러나을 가리키는 것으로 밝혀졌습니다 /bin/dash.

더 재미 있어요. 시작 dash하고 수행 echo $SHELL하면 인쇄됩니다 /bin/bash(기본적으로 동일합니까?). 그러나의 맨 페이지는 맨 페이지와 dash완전히 다릅니다 bash(따라서 동일 하지 않습니까?).


1
@ wzzrd,이 질문은 리눅스에만 해당됩니까?
aioobe

1
한숨, 나는 15 명의 담당자가 필요하기 때문에이 멋진 답변을 모두지지 할 수는 없습니다. / - : I에 유래에 18K를 가지고 나는 장애인 느낌
aioobe

4
/ bin / crash (gdb 팬의 경우), / bin / slash (긴축 프로그램), / bin / mash (한국의 어려운시기), / bin / sash (치어 리더의 경우), / bin / thrash는 어떻습니까? (HDD 하드), / bin / flash (데이터를 암호화하는 경우에만), / bin / stash (나중에 찾은 행운을 빕니다), / bin / cash (항상 돈입니다), / bin / pash (PC를 로밍), / bin / gash (aaargggh!).
PP.

2
@PP-Metal 음악 팬에게는 / bin / thrash를, 80 년대 락 밴드 리드 기타리스트 팬에게는 / bin / slash를
읽었습니다

1
echo $SHELL인쇄 하는 이유 /bin/bash는 해당 변수가 현재 실행중인 쉘이 아니라 로그인 할 때 시작되는 기본 쉘에 대해 설정 되었기 때문입니다. Bash 프롬프트에서 ksh 또는 zsh를 시작 echo $SHELL하면 여전히이라고 말합니다 /bin/bash. ps현재 실행중인 것을 확인하는 데 사용 합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

답변:


43

데비안과 우분투는 몇 가지 이유로 대시 (iirc)로 전환했습니다. 우선, Bash는 수년에 걸쳐 커졌습니다. 사실, /bin/bashUbuntu 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에서 스크립트가 실행될 확률을 높일 수 있습니다.


1
Bashisms로 스크립트를 작성하는 경우 /bin/bash; 많은 비 리눅스 시스템은 실제 sh쉘을 가지고 있으며, 심지어 호환되지 않습니다 bash.
Chris S

echo ${a#123}bashism이 아니며 POSIX Parameter 확장 사양의 일부입니다. pubs.opengroup.org/onlinepubs/009695399/utilities/… 당신은 고급 sed 스타일 배쉬 스타일을 얻지 못합니다. posix 스타일은 하위 문자열 스타일 + 간단한 확장 문자입니다. POSIX에서는 다음을 허용합니다.echo ${a#*6}
JM Becker



0

$SHELL실행할 때 모든 쉘이 설정 되는 것은 아니므로 다음을 사용하여 현재 쉘을 찾으십시오.

echo $0

오류가 발생하면 csh입니다. 그렇지 않으면 argv[0]호출 된 것입니다. 이것은 일반적으로 쉘이며 아마도 -하이픈이있는 것으로 로그인 쉘임을 나타냅니다.

호출 프로세스의 제어를 받기 때문에 이것이 보장 되지는 않지만 argv[0]실제로 가장 안정적인 접근 방식입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.