즉, POSIX 쉘과는 다른 Korn 쉘은 실제로 상용 Unix 세계에서 인기를 얻지 못했습니다. 이는 유닉스 상용화의 초기 단계와 일치했기 때문에 유닉스 전쟁 에 휘 말렸 기 때문 입니다. BSD 유닉스는 C 쉘을 선호하여이를 피했으며, 소스 코드는 Linux가 시작될 때 무료로 사용할 수 없었습니다 .⁵ 초기 Linux 배포자가 Linux 커널과 함께 사용할 명령 쉘을 찾았을 때, 그들은 일반적으로 당신이 이야기하고 있는 호환 가능한 것 중 하나 인 GNU Bash를 선택했습니다 sh
.⁶
위의 "쉘 스크립트"를 Bourne / POSIX 쉘 스크립팅을 의미하는 일반적인 용어로 사용했습니다. 이것은 Bourne 제품군 쉘의 편재성 때문입니다. 다른 쉘에서의 스크립팅에 대해 이야기하려면 "C 쉘 스크립트"와 같은 한정자를 제공해야합니다. C 패밀리 쉘이 기본 대화식 쉘인 시스템에서도 스크립트를 위해 Bourne 쉘을 사용하는 것이 좋습니다 .
이 다이어그램이 도움이 될 수 있습니다.
지정된 Bourne 제품군 쉘 스크립트가 이식 가능한지 여부를 확인하는 방법에는 여러 가지가 있습니다.
초기 버전의 BSD Unix 는 V6 Unix 용 애드온 소프트웨어 모음 일뿐입니다. V7까지 Bourne 쉘이 AT & T Unix에 추가되지 않았기 때문에 BSD는 기술적으로 Bourne 쉘을 가지지 않았습니다. Thompson 쉘의 기본 특성에 대한 BSD의 대답 은 C 쉘 이었습니다.
그럼에도 불구하고, 최초의 독립형 BSD 버전 (2.9BSD 및 3BSD)은 V7 또는 이식 가능한 후속 UNIX / 32V 기반 이므로 Bourne 쉘 이 포함되었습니다.
합니다 (2BSD 라인은 디지털의에 대한 BSD의 병렬 포크로 바뀌 PDP의 미니 3BSD와 4BSD 선이 같은 새로운 종류의 컴퓨터의 활용에가는 동안, Vaxen 및 유닉스 워크 스테이션 2.9BSD는 기본적으로 4.1cBSD의 PDP 버전이었다. 그들은했다 동시 및 공유 코드 . VAX가 도착했을 때 2BSD 라인이되도록 PDP의 그냥 사라지지 않았다 여전히 느릿 느릿한 함께 .)
Bourne 쉘은 1983 년까지 Unix 세계 어디에나 있다고 말할 수 있습니다. 이는 컴퓨팅 산업에서 "영원히"에 대한 근사치입니다. MS-DOS는 올해 계층 파일 시스템 얻었다 (! 오 ~, cuuute 방법) 및 제 24 비트 매킨토시 , 문자 그대로 그레이 스케일하지 -의 9 "의 B & W 화면이 검은 색 과 흰색 - 초기 내년 때까지 오지 않을 것입니다.
톰슨 쉘은 오늘날의 표준에 의해 매우 원시적 이었습니다 . 오늘날 우리가 기대하는 스크립트 프로그래밍 환경이 아닌 대화식 명령 셸이었습니다. 파이프와 I / O 재 지정과 같은 것을 가지고 있는데, 우리는 "유닉스 쉘"의 원형으로 생각합니다. 그래서 우리는 MS-DOS 명령 쉘 을 유닉스에서 가져 오는 것으로 생각합니다.
Bourne 쉘 은 PWB 쉘을 대체 하여 프로그램 가능성 ( if
, switch
및 while
) 및 초기 환경 변수 와 같은 Thompson 쉘에 중요한 사항을 추가했습니다 . PWB 쉘은 모든 유닉스 버전의 일부가 아니기 때문에 Thompson 쉘보다 덜 잘 기억됩니다.
POSIX와 Bourne 쉘 호환성에 대해 구체적으로 언급 하지 않은 사람 은 의미 할 수있는 모든 범위가 있습니다.
극단적으로, 그들은 1979 Bourne 쉘을 기준으로 사용할 수 있습니다. 에 " sh
이 의미에서 호환 스크립트는"진정한 Bourne 쉘 또는 그 후속와 클론의 완벽하게 실행 할 것으로 예상된다 의미 ash
, bash
, ksh
, zsh
, 등
다른 극단의 누군가는 POSIX에 의해 지정된 쉘을 기준으로 가정합니다. 우리는 오늘날 많은 표준 POSIX 쉘 기능을 "표준"으로 가져 와서 Bourne 쉘에 실제로 존재하지 않았다는 사실을 종종 잊어 버립니다. 내장 된 산술, 작업 제어, 명령 내역, 별명, 명령 행 편집, $()
명령 형식 대체 등
Korn 쉘은 1980 년대 초로 거슬러 올라가고 있지만 AT & T는 1988 년 System V Release 4 까지 Unix로 선적하지 않았습니다 . 많은 상용 Unix가 SVR4를 기반으로하기 때문에, 이는 ksh
거의 모든 상용 Unix를 1980 년대 후반
( SVR3 및 이전 버전을 기반으로 한 몇 가지 이상한 유닉스 맛 은 SVR4가 출시 된 후 시장에 출시되었지만 혁명 이 왔을 때 처음으로 벽에 맞았습니다 .)
1988 년은 Korn 쉘 기반 "POSIX 쉘"을 사용하여 POSIX 표준 이 처음 나온 해입니다. 1993 년에 Korn 쉘의 개선 된 버전이 나왔습니다. POSIX 때문에 효과적으로 자리에 원래 못을 박았다 ksh
: 두 가지 버전으로 갈래를 ksh88
하고 ksh93
자신의 분할에 관련된 세의 이름을 따서 명명.
ksh88
차이점은 적지 만 일부 버전의 ksh88
셸이 POSIX와 호환되도록 패치 되었으므로 POSIX와 완전히 호환되지는 않습니다 . (이것은 David G. Korn 박사와 Slashdot에 대한 흥미로운 인터뷰에서 나온 것 입니다. 예, 껍질을 쓴 사람입니다.)
ksh93
이다 는 POSIX 쉘의 완벽한 호환 상위 . 기본 소스 리포지토리가 AT & T 에서 GitHub 로 이동 한 이후 개발 ksh93
이 산발적으로 진행되었습니다 . (프로젝트의 기본 이름은 1993 이후 릴리스 버전을 나타 내기 위해 접미사가 추가 된 상태 로 남아 있습니다.)ksh93
Korn 쉘을 POSIX 쉘과 별개로 포함하는 시스템은 대개 /bin/ksh
다른 곳에서는 숨기고 있지만 로 사용할 수 있습니다.
ksh
이름 또는 Korn 쉘에 대해 이야기 할 때 ksh93
이전 버전과 호환되는 Bourne 및 POSIX 쉘 서브 세트와 구별되는 기능 에 대해 이야기 합니다. 당신은 ksh88
오늘 순수한 곳을 거의 뛰어 다니지 않습니다 .
AT & T는 2000 년 3 월까지 Korn 쉘 소스 코드를 독점적으로 유지했습니다 . 이 시점에서 리눅스와 GNU Bash의 연관성은 매우 강력했습니다. 배쉬와 ksh93
각각은 다른 것에 비해 장점 이 있지만,이 시점에서 관성은 리눅스와 배쉬와 밀접한 관계를 유지한다.
초기 리눅스 업체들이 가장 일반적으로 이상 GNU 배쉬 선택하는 이유에 관해서는 pdksh
, 이었다 리눅스가 시작되었을 때 사용할 수를, 나는 유저 랜드의 나머지 너무 많은도에서 왔기 때문에 그것의 추측에는 요 GNU 프로젝트 . Bash pdksh
개발자는 Korn 쉘 기능을 복사하는 데 제한을 두지 않기 때문에 Bash는.
pdksh
AT & T가 소스 코드를 실제 Korn 쉘에 릴리스 한 시점에 대한 작업은 중단되었습니다. 그러나 여전히 유지 관리되는 두 가지 주요 포크가 있습니다 : OpenBSD pdksh
와 MirBSD Korn Shellmksh
.
mksh
Cygwin을 위해 현재 패키지 된 유일한 Korn 쉘 구현 이라는 것이 흥미 롭습니다 .
GNU Bash는 여러 방법으로 POSIX를 뛰어 넘지 만보다 순수한 POSIX 모드에서 실행하도록 요청할 수 있습니다 .
csh
/ tcsh
는 보통 1990 년대 초반까지 BSD 유닉스에서 기본 대화식 쉘이었습니다.
BSD 변형이기 때문에, Mac OS X의 초기 버전은 Mac OS X 10.2 "Jaguar"를 통해 이런 식으로 진행되었습니다 . OS X 10.3 "Panther"tcsh
에서 OS X 은 기본 쉘 을 Bash 로 전환했습니다 . 이 변경 사항은 10.2 이하에서 업그레이드 된 시스템에는 영향을 미치지 않았습니다. 변환 된 시스템의 기존 사용자는 자신의 tcsh
셸을 유지했습니다 .
FreeBSD 는 여전히 tcsh
기본 쉘로 사용한다고 주장 하지만, 여기에있는 FreeBSD 10 VM에서 기본 쉘은 POSIX 호환 Almquist 쉘 변형 중 하나 인 것으로 보입니다 . 이것은 NetBSD에서도 마찬가지입니다.
OpenBSD는 pdksh
대신 포크를 기본 쉘로 사용합니다.
리눅스와 OS X의 인기가 높아짐에 따라 일부 사람들은 FreeBSD가 Bash로 전환하기를 원하지만 철학적 인 이유로 곧 그렇게하지 않을 것 입니다. 이다 로 전환하기 쉬운 이 당신을 귀찮게하는 경우.
/bin/sh
요즘 진정한 바닐라 본 쉘을 갖춘 시스템을 찾는 것은 드 rare니다 . 호환성 테스트를 위해 충분히 가까운 것을 찾아야합니다.
나는 현대 컴퓨터의 정품 1979 빈티지 Bourne 쉘을 실행 한 방향으로 만 알고 있어요 : 사용 고대 유닉스 V7의 와 디스크 이미지를 SIMH PDP-11 시뮬레이터 로부터 컴퓨터 역사 시뮬레이션 프로젝트 . SIMH는 유닉스 컴퓨터 뿐만 아니라 거의 모든 최신 컴퓨터 에서 실행됩니다 . SIMH는 Android 및 iOS 에서도 실행 됩니다 .
와 오픈 솔라리스 , 썬은 -열 공급 처음 Bourne 쉘의 SVR4 버전. 그 전에 V7 이후 버전의 Bourne 쉘의 소스 코드는 Unix 소스 코드 라이센스가있는 사용자 만 사용할 수있었습니다.
이 코드는 이제 몇 가지 다른 소스에서 쓸모없는 OpenSolaris 프로젝트의 나머지 부분과 별도로 사용할 수 있습니다.
가장 직접적인 소스는 Heirloom Bourne 쉘 프로젝트 입니다. 이것은 OpenSolaris의 최초 2005 릴리스 직후에 제공되었습니다. 다음 몇 개월 동안 일부 이식성과 버그 수정 작업이 완료되었지만 프로젝트 개발이 중단되었습니다.
Jörg Schilling은 Schily Tools 패키지 osh
에서와 같이이 코드의 버전을 유지 관리하는 데 더 나은 작업을 수행했습니다 . 이에 대한 자세한 내용은 위를 참조하십시오.
2005 소스 코드 릴리스에서 파생 된 이러한 쉘에는 멀티 바이트 문자 세트 지원, 작업 제어, 쉘 기능 및 원래 1979 Bourne 쉘에없는 기타 기능이 포함되어 있습니다.
원래 Bourne 셸에 있는지 여부를 확인하는 한 가지 방법은 톰슨 셸에서 쉽게 전환 할 수 있도록 문서화되지 않은 기능을 지원하는지 확인하는 것 ^
입니다 |
. 다시 말해, 이와 같은 명령 ls ^ more
은 Korn 또는 POSIX 유형 쉘에서 오류를 발생 시키지만 ls | more
실제 Bourne 쉘에서 작동합니다 .
간혹 fish
, scsh
또는 rc/es
지지자를 만났지만 C 셸 팬보다 훨씬 드 rare니다.
rc
쉘의 가족은 일반적으로 유닉스 / 리눅스 시스템에서 사용되지 않지만 가족은 위의 그림에있는 장소를 취득하는 방법이다, 역사적으로 중요하다. Bell Labs의 운영 체제 설계에 대한 지속적인 연구의 일환으로 작성된 10th Edition Unix 의 후속 버전 인 Bell Labs 운영 체제 rc
의 Plan 9 표준 쉘입니다 . 프로그래밍 수준에서 Bourne 및 C 쉘과 호환되지 않습니다. 아마도 거기에 교훈이있을 것입니다.
가장 활발한 변형은 Byby Rakitzis 의 Unix 클론을 기반으로하는 Toby Goodwin에 의해 유지되는 변형 인 rc
것으로 보입니다.rc
sh
) 과 호환되는 (실행 가능한) 구문을 사용하는지 여부를 나타냅니다 . 다른 쉘의 경우 해당 쉘이 Bourne 쉘 스크립트를 실행할 수 있는지 여부를 나타냅니다.