왜 Bash가 어디에 있습니까? (모든 Linux 배포판이 아닌 경우가 많습니까)?


50

Bash는 Z 쉘 (zsh) 과 같은 대안보다 내가 시도한 모든 Linux 배포에서 기본적으로 사용됩니다 . 이에 대한 기술적 또는 역사적 이유가 있습니까?


1
그렇지 않습니다. 내 FreeBSD 시스템에서 tcsh는 기본 쉘입니다!

54
FreeBSD 시스템은 Linux 배포판이 아닙니다.

8
하나님은 ... 배포판 사이에 일관성이있다 금지
OMG 조랑말

4
아니오, 그러나 "모든 곳"에 속합니다 :)

답변:


106

역사 (연구를 통해서가 아니라 Bell Labs 사람들과 어울리는 데 너무 많은 시간을 소비함으로써 획득) :

  1. 처음에는 (시작을 유닉스 버전 7로 생각한다면) Bourne 쉘이었습니다. Steve Bourne은 사용자의 상호 작용을 제어하는 ​​셸이 운영 체제의 특수한 부분이 아니라 사용자 프로그램 일 수 있음을 처음으로 보여주었습니다. 역사적인 돌파구. 쉘 자체는 스크립팅을 위해 비교적 깨끗했지만 명령 줄 편집이나 작업 제어는 없었습니다. Bourne의 Unix Shell 소개 는 오늘날 초보자에게 여전히 유용합니다.

    편집 : 나는 켄 톰슨과 John Mashey, 그리고 Multics의 일부 "선사"를 무시했습니다. 나는 Bourne이이 모든 작업을 알고 있었을 것이라고 확신하지만 (Bell Labs에서 동일한 실험실 인 1127 번에 있었음) Bourne의 껍질은 결정적이며 초기 작업은 Steve Bourne의 해석을 제외하고는 거의 영향을 미치지 않았습니다. 예를 들어, Ken은 나중에 Plan 9 C 컴파일러를 작성했지만 Plan 9에 큰 영향을 미쳤지 만 Plan 9 쉘 (rc)에 대한 Tom Duff의 논문은 Thompson이 아니라 Bourne의 쉘만 언급합니다.

  2. 쉘은 단지 사용자 프로그램이므로 누구나 작성할 수 있습니다. 뉴저지에서 Version 7 Unix를 만들었을 때 Berkeley Unix는 캘리포니아에서 만들어졌습니다. 버클리의 빌 조이는 cshC 쉘을 썼다 . Joy는 작업 제어 및 히스토리와 이후의 명령 행 편집을 추가했지만 Bourne의 작업을 인식하지 못했으며 Thompson 쉘 (이전 글 머리표에서 "사전"으로 간주 됨)에 대한 그의 언어를 기반으로했습니다. 유닉스 공동체는 직업 통제를 좋아했지만 Bourne의 언어도 좋아했습니다. csh 언어에 대해 특히 좋지 않은 논쟁에 대해서는 Csh 프로그래밍을 고려한 유해한 내용을 참조하십시오 . 한동안 많은 사람들 csh이 작업 제어 및 기록 기능으로 대화식으로 사용했지만 Bourne을 사용 sh하여 스크립트를 작성했습니다. 이 상황은 이상적이지 않았습니다.

    편집 :의 연대기를 바로 잡아 준 DigitalRoss에게 감사합니다 csh. BSD를 "버클리 이단 (Berkeley heresy)"이라고하는 사람들로부터 교육을 받았기 때문에 사실이 부족했습니다.

  3. Bell Labs의 Dave Korn은 Bourn 쉘을 훌륭하게 리엔지니어링하여 Korn 쉘 (ksh)을 생산했습니다. Bourne 쉘과 완벽하게 역 호환 sh되었지만 귀중한 개선 사항을 제공했습니다. kshPOSIX 표준의 기초가되었으며 Sun 소프트웨어와 함께 표준으로 제공되었습니다. (Bill Joy가 Berkeley를 떠나서 Sun을 찾도록 도와 주었음에도 불구하고 주요 소프트웨어 전문가 중 한 명이었습니다.)

  4. Bell Labs와 AT & T는 어리석게도 ksh오픈 소스 를 만들지 못했습니다 . ksh88널리 사용되지만 소스를 갖는 것은 합법적이지 않습니다. 어떤 사람들은 중독되어 디지털 범죄자가됩니다.

    편집 : 이것은 정말 어리석은가? 알기 어렵다. 버클리는 이미 유닉스를 포기하고 있었고 다른 회사들도 곧 따라갈 것이지만, 여전히 기업 마스터스가 유닉스를 청구한다고 믿었던 시대였습니다. 그러나 결과 : AT & T Unix는 여러 당사자에게 여러 번 매각 된 후 죽었습니다. BSD와 그 파생물은 살아 있고 잘 알려져 있지만 "Linux"와 "GNU"라고 불리는 이러한 신생 기업은 한때 Bell Labs에 속했던 많은 부분을 공유합니다.

  5. 자유 소프트웨어 재단 (Free Software Foundation)은 POSIX 셸을 처음부터 구현하여 "크린룸"을 수행하여 Dave Korn의 모든 아이디어를 당시의 최신 정보로 사용하고 프로그래밍 가능한 완성과 같은 고유 한 새로운 기능을 추가하는 일반적인 FSF 스타일을 사용합니다. "Bourne again"쉘이라고합니다 bash.

  6. 1990 년대 중반에는 AT & T 오픈 소스 ksh93였지만, 지금은 널리 채택 되기에는 너무 늦었습니다. 라이센스 계약은 이상하게 비표준입니다. bashksh분기, 그리고 ksh결코 역사에서 그 자리에 상응하는 시장 점유율을 달성하지 않습니다.

수업 :

  • 시장에 첫 번째로 적합한 제품이 승리합니다 (sh).

  • 사람들은 새로운 기능 (작업 제어, 명령 완성)을 좋아하지만 이전 스크립트가 계속 작동하면 더 좋아합니다.

  • 편집 : 공학 교수는 과학의 역사가에게 역사를 남겨야합니다 :-)


나는 당신이 정말로 다른 모든 것보다 bash의 인기에 대해 가장 완전하고 정확한 설명을 가지고 있다고 생각합니다. 나는 기본적으로 zsh로 설정된 환경을 보았고 모든 구문이 약간 떨어져서 알아낼 수 없거나 실수를하기 때문에 싫어합니다.

총알 (1)은 수정이 필요합니다. Bourne 쉘이 Mashey 쉘 이전, Mashey 쉘이 ur 쉘인 Ken Thompson 쉘 이전. 참조 en.wikipedia.org/wiki/Unix_shell
짐 Ferrans

2
노먼을 비난하지 않고 여기에 많은 부정확성이 있습니다. Ken Thompson은 V6을 통한 유일한 쉘이며 V7 및 32V에서 병렬로 사용중인 첫 번째 쉘을 작성했습니다. Stephen Bourne은 "첫 번째"쉘 라이터가 아니었고 KT 쉘을 다시 썼습니다. Csh는 4.1BSD가 될 때까지 작업 제어 기능을 갖지 못했습니다. Csh는 쉘 구문을 변경하지 않았으며 Bourne 쉘과 마찬가지로 V6 쉘과 호환됩니다. 그 당시 거의 모든 코드가 라이센스되었습니다. 유닉스 라이센스 비용 청구에 대해 정확히 어리석은 것은 무엇입니까?
DigitalRoss

2
아마도 이것을 잘 설명하지 못하고 다시 시도하겠습니다. Csh 는 Bourne보다 먼저 , 또는 최신에는 대륙에서 병렬로 구현되었습니다. (인터넷 전에는 문제가되었습니다.) 나는 때때로 코리 홀의 빌 조이 옆에 앉아 있었는데, 그가 글을 쓸 때; 그가 V6에 썼다는 것을 절대 확신 할 수 있습니다. 내가 말했듯이 csh (및 Bourne)는 V6-Thompson과 역 호환됩니다. 작성했을 때 존재했던 모든 것입니다. 물론 본 쉘 호환 아니에요, AFAIK 빌 조이 (Bill Joy)의 재능은 미래를보고 포함하지 않았다
DigitalRoss

1
bash에서 프로그래밍 가능한 완성이라는 아이디어를 얻지 못했습니까 tcsh?

46

배쉬에는 완전히 다른 두 가지가 있습니다.

  1. 좋은 껍질입니다. 히스토리 대체 csh와 같은 멋진 기능 중 일부를 !posix 구문에 통합하는 것은 아마도 2 개의 쉘 중 하나입니다 (다른 하나는 zsh입니다) . 배열을 포함하여 많은 확장이 있습니다.

  2. FSF / GNU 쉘입니다. 오픈 소스 세계에서 이것은 일종의 캐시를 제공합니다.

또한 이것이 항상 기본값이 아니라는 것을 추가해야합니다. 대화식 쉘일 수 있지만 "명령 파일 만 실행" 쉘이 ash되도록 종종 / bin / sh로 사용됩니다 . 때문입니다 더 작고 더 빠른, 그리고 POSIX의 기능이 포함되어 있으므로이 부분 집합이다. 대화식 쉘로 사용 하는 것은 때때로 문제가됩니다. NetBSD는 모든 기능이 내장되어 있기 때문에 잘 작동합니다. 그것은 하나의 쉘의 일종이지만 외부 패키지입니다. 그러나 Linux 에서는 일반적으로 비 대화식으로 간주되므로 기록을 사용하지 않고 거대한 스크립트 를 실행하는 데 사용된다는 이론에서 (중요한) 줄 편집없이 컴파일합니다 .bashashashashbashashgnu configure

두 껍질의 이야기

껍질의 실제 역사

업데이트 : 웹에서 장소마다 복사되는 셸의 기록이 정확하지 않으며 사람들이 이해할 수 있습니다. 정확한 버전을 제공하고 여기에이를 입증 할 수있는 몇 가지 링크를 제공하려고합니다.

  1. 첫 번째 쉘은 확실히 Bourne 쉘이 아니지만 Ken Thompson이 직접 작성하고 V6에 배포되었습니다.이 버전은 AT & T가 다양한 대학 및 정부 연구소로 전송됩니다. 이것이 유닉스를지도에 넣은 것입니다. 모든 기본 사항이 <, >, >>, |, &있었지만 goto표준 입력을 찾는 외부 프로그램을 통해 간단한 제어 구문 이있었습니다 . 복잡한 쉘 스크립트는 없었습니다. 이후 쉘은 별도의 fd에서 명령 입력을 엽니 다. 오늘날은 단순 해 보이지만 1970 년대의 컴퓨팅 인 공포 영화에서는 지구상에서 가장 좋은 것이 었습니다. 믿거 나 말거나,이 고대 껍질에는 오늘 자체 트위터 스트림 과 물론 홈페이지가 있습니다.
  2. 두번째 셸 있었다 csh, (있다는 기록 vi에 의해) 빌 조이 UCB에서. 이것은 GNU readline과 NetBSD editline 이전에 있었으므로 !구문으로 히스토리를 수행하는 것은 완벽하게 합리적이었습니다 . Csh는 오늘날의 쉘 기능 대부분을 csh 구문으로 추가했습니다. csh는 구문 을 아무렇게나 변경하지 않았습니다 . 실제로는 톰슨 쉘과 역 호환이 가능했으며 원래 TS 소스 코드가 포함되었습니다.
  3. 세 번째 쉘은 다른 구문의 Bourne 쉘입니다. Unix는 UCB와 AT & T에서 동시에 개발되었습니다. 이 쉘은 (나는 그냥 더 많은 메모리를 사용하는 생각에 갇혀 SIGSEGV 새로운 BRK (2) 다음 다시 시도했다) 이상한 메모리 할당을 가지고 새로운 유닉스 포트에서 실행하기가 어려운 만든, 그래서 oshcsh시간에 대한 인기가 있었다 . 인터넷은 없었으며 라이센스 된 SW도 있었기 때문에 그 환경에서 Stephen Bourne 은 Joy의 껍질에 대해 알지 못했고 Joy는 Bourne에 대해 알지 못할 수 있습니다. UCB가 VAX와 현재 잊혀진 Unix / 32V 의 시험판을 받았을 때 두 쉘이 처음으로 만났을 수도 있습니다. Bill이 메모리 할당에 대해 불평 한 것을 기억합니다. 참고 두 쉘은 V6 쉘 이전 버전과 호환 있었다단순히 구문을 다른 방향으로 확장했습니다.
  4. 이제 AT & T가 Bourne-compatible을 추가 한 호환되지 않는 쉘이 여러 개있었습니다 ksh. 결국, csh반 이용 가능한 소스 코드가 있었지만 AT & T와 University of California 사이소송 에 묶여있었습니다 . 여전히 5 만 달러의 수수료를 지불 할 수있는 정교한 회사가 AT & T 라이센스를 구매하지만 4.x BSD 배포판을 설치하고 대학은 무료로 제공했기 때문에 BSD 유닉스의 영광스러운 시절이었습니다.
  5. 많은 법적 및 기술적 문제가있는 상황에서 다양한 독립적 인 구현이 수행되었습니다. 적어도 cshBourne 쉘 구문과 마찬가지로 구문을 사용하고 일부는 두 가지를 병합했습니다. 당신은 한 이상 tcsh, zsh, bash,와 ash. Bourne 구문은 AT & T 릴리스의 일부인 "공식"이지만, 그 당시 BSD는 매우 중요했으며 Sun (처음 BSD)은 세계가 직면 한 상당한 양의 Unix SW를 배포했습니다.
  6. USL 소송으로 인해 FSF와 Linux는 개방 된 분야를 가지고있었습니다. 한편, AT & T는 지구상에서 (캘리포니아 주)보다 더 큰 소수의 단체 중 하나와 싸울 수 있었으며 결국 소송에서 이기지 못했기 때문에 결국 BSD 배포는 확고한 합법적이었습니다. 기초. 그러나 그때까지 리눅스와 bash는 어디에나 있었으므로 오늘날 BSD는 틈새 시장입니다.
  7. 마지막으로, bash는 훌륭한 셸 (원래 저자가 개인적으로 파기 한 것으로 보이지만)이며 자체 성공에 대한 가치가 있습니다. csh는 ash, bash 및 ksh가 구문 전쟁에서 이기지 못했더라도 tcsh 및 zsh에 의해 식화되었을 수 있습니다.

또한 / bin / sh는 정적으로 연결되어야합니다.

/bin있고 /sbin의존하는 것이 있으면 /usr깨져서 고쳐야합니다. 의 라이브러리에만 의존해야합니다 /lib. loginPAM 만 필요합니다. 동적 라이브러리가 필요한 "최신 API"는 NSS입니다. "동향"? NetBSD의 2.0은 이미 완전히 동적으로 전환 /bin하고 /sbin오년 전, FreeBSD의 5.2 더 오래 전에, 리눅스는 ... 음, 그 배포판에 따라 차이가 있지만 너무 오랜 시간이되었습니다.
ephemient

2
나는 나의 대답이 나의 독창적 인 일임을 분명히하고 싶다. 어느 곳에서도 단어가 복사 되지 않았습니다 .
Norman Ramsey

1
물론, 나는 당신이 그것을 붙여 넣은 것을 의미하지는 않았습니다. 단지 많은 잘못된 정보가 있다는 것입니다. 그리고 이미 오해 된 이야기를보고하기 위해 당신을 비난하고 싶지 않았습니다.
DigitalRoss

6

@DigitalRoss가 말한 것에 추가하려면

  • Bash는 posix-sh에 대한 완전한 수퍼 세트 대체품입니다. / bin / sh로 불리는 경우 posix-sh가 완전히 에뮬레이트됩니다. Posix-sh는 상용 분모 쉘로서 상용 유닉스 시스템의 "표준"이었습니다. 따라서 거기서 시작하여 구축되는 것이 많이 시작됩니다.

4

GNU는 우리가 "Linux"라고하는 것을 사용할 수있게 해주는 모든 기본 Unix 소프트웨어 복제본을 제공하거나 제공 한 반면 Linux는 단지 커널 (및 필요한 지원 사항)이기 때문입니다. Bash는 Unix 버전 7 의 이전 Bourne 쉘 (sh) 의 복제본으로 작성된 GNU 프로젝트의 쉘입니다 .


그는 "왜 쉘 프로그램이"물어 아니에요
하센

@hasen j : 그가 사용했던 모든 Linux 시스템이 기본적으로 Bash를 쉘로 사용하는 역사적인 이유가 있는지 질문합니다.
구걸

2
@ hasen j : beggs는 "왜 쉘 프로그램이 있습니까?"라고 대답하지 않습니다. 다른 모든 슬관절 다운 보터가 분명히 있기 때문에 대답의 요점을 놓쳤습니다.

1

unix.com 설문 조사에 따르면 ksh보다 훨씬 앞서 있지는 않습니다.
/ bin / sh 83 8.96 %
/ bin / csh 36 3.89 %
/ bin / ksh 370 39.96 %
/ bin / tcsh 36 3.89 %
/ bin / bash 401 43.30 %


0

Bash는 풍부한 기능 세트로 인해 널리 사용됩니다. 또한 C 쉘 및 Korn 쉘과 같은 다른 쉘의 기능도 채택합니다. 이러한 기능 세트를 살펴보십시오 .


0

'bash'는 100 % 'sh / ksh'와 호환 가능하고 'ksh'는 POSIX 쉘이기 때문에.

따라서 POSIX 호환 시스템을 원하고 Linux를 사용하는 경우 bash를 사용하십시오.

상업용 유닉스에 있다면 일반적으로 ksh를 기본 쉘로 사용합니다 (때로는 평범한 오래된 sh). 어떤 이유로 든 Sun은 여전히 ​​flakey csh c-shell을 기본값으로 사용합니다.

장점은 hp-ux 또는 AIX 용으로 작성된 .sh가 변경없이 Linux 'bash'로 실행될 가능성이 높다는 것입니다.


kshPOSIX 쉘 이 아닙니다 . POSIX 쉘 과 같은 것은 없습니다 . POSIX 사양을 따르는 쉘이 있습니다.이 쉘 ksh중 하나가 유일한 것은 아닙니다.

0

그리고 다른 모든 답변에 추가하는 zsh것은 하위 호환성을 의미하지는 않습니다. 호환되도록 설정할 수 있지만 기능이 손실됩니다.

내가 사용합니까 zsh내 일반 대화 형 셸,하지만 bash/ dash더 제정신 나에게 쉘 스크립트 언어로 보인다; 그들은 마법이 적고 예측 가능합니다 ... 수년 동안 작동하는 스크립트를 작성할 때 나에게 더 중요합니다.


0

그냥 문제를 혼동의 sh명령은 때로는 상징적 같은 다른 쉘 프로그램 링크입니다 ash, bash또는 dash.

우분투에 연결하는 데 사용 bash하기 때문에 bash호환되는 모든 Bourne 셸 스크립트를 실행하도록 설계되었습니다.

그러나 최근 우분투는로 sh연결되는 것으로 전환 했습니다 dash. 스크립트 (및 스크립트) dash를 실행하도록 설계 되었지만 스크립트에만 사용하도록 설계되었으므로 대화식 기능이 없습니다 . 그것은 더 작고 (아마도) 더 빠릅니다.bashshbash

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