답변:
역사 (연구를 통해서가 아니라 Bell Labs 사람들과 어울리는 데 너무 많은 시간을 소비함으로써 획득) :
처음에는 (시작을 유닉스 버전 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의 쉘만 언급합니다.
쉘은 단지 사용자 프로그램이므로 누구나 작성할 수 있습니다. 뉴저지에서 Version 7 Unix를 만들었을 때 Berkeley Unix는 캘리포니아에서 만들어졌습니다. 버클리의 빌 조이는 csh
C 쉘을 썼다 . Joy는 작업 제어 및 히스토리와 이후의 명령 행 편집을 추가했지만 Bourne의 작업을 인식하지 못했으며 Thompson 쉘 (이전 글 머리표에서 "사전"으로 간주 됨)에 대한 그의 언어를 기반으로했습니다. 유닉스 공동체는 직업 통제를 좋아했지만 Bourne의 언어도 좋아했습니다. csh 언어에 대해 특히 좋지 않은 논쟁에 대해서는 Csh 프로그래밍을 고려한 유해한 내용을 참조하십시오 . 한동안 많은 사람들 csh
이 작업 제어 및 기록 기능으로 대화식으로 사용했지만 Bourne을 사용 sh
하여 스크립트를 작성했습니다. 이 상황은 이상적이지 않았습니다.
편집 :의 연대기를 바로 잡아 준 DigitalRoss에게 감사합니다 csh
. BSD를 "버클리 이단 (Berkeley heresy)"이라고하는 사람들로부터 교육을 받았기 때문에 사실이 부족했습니다.
Bell Labs의 Dave Korn은 Bourn 쉘을 훌륭하게 리엔지니어링하여 Korn 쉘 (ksh)을 생산했습니다. Bourne 쉘과 완벽하게 역 호환 sh
되었지만 귀중한 개선 사항을 제공했습니다. ksh
POSIX 표준의 기초가되었으며 Sun 소프트웨어와 함께 표준으로 제공되었습니다. (Bill Joy가 Berkeley를 떠나서 Sun을 찾도록 도와 주었음에도 불구하고 주요 소프트웨어 전문가 중 한 명이었습니다.)
Bell Labs와 AT & T는 어리석게도 ksh
오픈 소스 를 만들지 못했습니다 . ksh88
널리 사용되지만 소스를 갖는 것은 합법적이지 않습니다. 어떤 사람들은 중독되어 디지털 범죄자가됩니다.
편집 : 이것은 정말 어리석은가? 알기 어렵다. 버클리는 이미 유닉스를 포기하고 있었고 다른 회사들도 곧 따라갈 것이지만, 여전히 기업 마스터스가 유닉스를 청구한다고 믿었던 시대였습니다. 그러나 결과 : AT & T Unix는 여러 당사자에게 여러 번 매각 된 후 죽었습니다. BSD와 그 파생물은 살아 있고 잘 알려져 있지만 "Linux"와 "GNU"라고 불리는 이러한 신생 기업은 한때 Bell Labs에 속했던 많은 부분을 공유합니다.
자유 소프트웨어 재단 (Free Software Foundation)은 POSIX 셸을 처음부터 구현하여 "크린룸"을 수행하여 Dave Korn의 모든 아이디어를 당시의 최신 정보로 사용하고 프로그래밍 가능한 완성과 같은 고유 한 새로운 기능을 추가하는 일반적인 FSF 스타일을 사용합니다. "Bourne again"쉘이라고합니다 bash
.
1990 년대 중반에는 AT & T 오픈 소스 ksh93
였지만, 지금은 널리 채택 되기에는 너무 늦었습니다. 라이센스 계약은 이상하게 비표준입니다. bash
및 ksh
분기, 그리고 ksh
결코 역사에서 그 자리에 상응하는 시장 점유율을 달성하지 않습니다.
수업 :
시장에 첫 번째로 적합한 제품이 승리합니다 (sh).
사람들은 새로운 기능 (작업 제어, 명령 완성)을 좋아하지만 이전 스크립트가 계속 작동하면 더 좋아합니다.
편집 : 공학 교수는 과학의 역사가에게 역사를 남겨야합니다 :-)
배쉬에는 완전히 다른 두 가지가 있습니다.
좋은 껍질입니다. 히스토리 대체 csh
와 같은 멋진 기능 중 일부를 !
posix 구문에 통합하는 것은 아마도 2 개의 쉘 중 하나입니다 (다른 하나는 zsh입니다) . 배열을 포함하여 많은 확장이 있습니다.
FSF / GNU 쉘입니다. 오픈 소스 세계에서 이것은 일종의 캐시를 제공합니다.
또한 이것이 항상 기본값이 아니라는 것을 추가해야합니다. 대화식 쉘일 수 있지만 "명령 파일 만 실행" 쉘이 ash
되도록 종종 / bin / sh로 사용됩니다 . 때문입니다 더 작고 더 빠른, 그리고 POSIX의 기능이 포함되어 있으므로이 부분 집합이다. 대화식 쉘로 사용 하는 것은 때때로 문제가됩니다. NetBSD는 모든 기능이 내장되어 있기 때문에 잘 작동합니다. 그것은 하나의 쉘의 일종이지만 외부 패키지입니다. 그러나 Linux 에서는 일반적으로 비 대화식으로 간주되므로 기록을 사용하지 않고 거대한 스크립트 를 실행하는 데 사용된다는 이론에서 (중요한) 줄 편집없이 컴파일합니다 .bash
ash
ash
ash
bash
ash
gnu configure
껍질의 실제 역사
업데이트 : 웹에서 장소마다 복사되는 셸의 기록이 정확하지 않으며 사람들이 이해할 수 있습니다. 정확한 버전을 제공하고 여기에이를 입증 할 수있는 몇 가지 링크를 제공하려고합니다.
<, >, >>, |, &
있었지만 goto
표준 입력을 찾는 외부 프로그램을 통해 간단한 제어 구문 이있었습니다 . 복잡한 쉘 스크립트는 없었습니다. 이후 쉘은 별도의 fd에서 명령 입력을 엽니 다. 오늘날은 단순 해 보이지만 1970 년대의 컴퓨팅 인 공포 영화에서는 지구상에서 가장 좋은 것이 었습니다. 믿거 나 말거나,이 고대 껍질에는 오늘 자체 트위터 스트림 과 물론 홈페이지가 있습니다.csh
, (있다는 기록 vi
에 의해) 빌 조이 UCB에서. 이것은 GNU readline과 NetBSD editline 이전에 있었으므로 !
구문으로 히스토리를 수행하는 것은 완벽하게 합리적이었습니다 . Csh는 오늘날의 쉘 기능 대부분을 csh 구문으로 추가했습니다. csh는 구문 을 아무렇게나 변경하지 않았습니다 . 실제로는 톰슨 쉘과 역 호환이 가능했으며 원래 TS 소스 코드가 포함되었습니다.osh
및 csh
시간에 대한 인기가 있었다 . 인터넷은 없었으며 라이센스 된 SW도 있었기 때문에 그 환경에서 Stephen Bourne 은 Joy의 껍질에 대해 알지 못했고 Joy는 Bourne에 대해 알지 못할 수 있습니다. UCB가 VAX와 현재 잊혀진 Unix / 32V 의 시험판을 받았을 때 두 쉘이 처음으로 만났을 수도 있습니다. Bill이 메모리 할당에 대해 불평 한 것을 기억합니다. 참고 두 쉘은 V6 쉘 이전 버전과 호환 있었다단순히 구문을 다른 방향으로 확장했습니다. ksh
. 결국, csh
반 이용 가능한 소스 코드가 있었지만 AT & T와 University of California 사이 의 소송 에 묶여있었습니다 . 여전히 5 만 달러의 수수료를 지불 할 수있는 정교한 회사가 AT & T 라이센스를 구매하지만 4.x BSD 배포판을 설치하고 대학은 무료로 제공했기 때문에 BSD 유닉스의 영광스러운 시절이었습니다.csh
Bourne 쉘 구문과 마찬가지로 구문을 사용하고 일부는 두 가지를 병합했습니다. 당신은 한 이상 tcsh
, zsh
, bash
,와 ash
. Bourne 구문은 AT & T 릴리스의 일부인 "공식"이지만, 그 당시 BSD는 매우 중요했으며 Sun (처음 BSD)은 세계가 직면 한 상당한 양의 Unix SW를 배포했습니다./bin
있고 /sbin
의존하는 것이 있으면 /usr
깨져서 고쳐야합니다. 의 라이브러리에만 의존해야합니다 /lib
. login
PAM 만 필요합니다. 동적 라이브러리가 필요한 "최신 API"는 NSS입니다. "동향"? NetBSD의 2.0은 이미 완전히 동적으로 전환 /bin
하고 /sbin
오년 전, FreeBSD의 5.2 더 오래 전에, 리눅스는 ... 음, 그 배포판에 따라 차이가 있지만 너무 오랜 시간이되었습니다.
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 %
'bash'는 100 % 'sh / ksh'와 호환 가능하고 'ksh'는 POSIX 쉘이기 때문에.
따라서 POSIX 호환 시스템을 원하고 Linux를 사용하는 경우 bash를 사용하십시오.
상업용 유닉스에 있다면 일반적으로 ksh를 기본 쉘로 사용합니다 (때로는 평범한 오래된 sh). 어떤 이유로 든 Sun은 여전히 flakey csh c-shell을 기본값으로 사용합니다.
장점은 hp-ux 또는 AIX 용으로 작성된 .sh가 변경없이 Linux 'bash'로 실행될 가능성이 높다는 것입니다.