왜 누구도 실제 Bourne 쉘을 /bin/sh로 사용하지 않습니까?

왜 누구도 실제 Bourne 쉘을 /bin/sh로 사용하지 않습니까?

나는 기본적으로 내가 작업한 시스템 중 /bin/sh실제 실행 파일이 없다는 것을 알았습니다. POSIX 모드에서는 항상 dash심볼릭 링크 bash나 이와 유사한 것 입니다.

왜? 실제 원본을 사용하면 어떤 단점이 있나요 /bin/sh? (속도? 권한?)

답변1

기능이 부족한 것 같습니다. 명령 기록도 없고, 멋진 리디렉션도 없고, 명령줄 편집도 없습니다. 이러한 이유로 BSD는 cshC 쉘을 도입했습니다. 또 다른 요인은 정품 Bourne Shell이 ​​단지최근 오픈소스로 공개. 허락을 받지 않으면 배포할 수 없습니다. 이는 무료 배포판의 범위를 벗어나게 하며 이념적으로 다른 배포판 및 *BSD에 부적합하게 만듭니다.

하지만사용 가능한 코드지금. 살펴보고, 컴파일하고, 시도해 볼 수 있습니다.

답변2

귀하의 질문에 있는 설명이 올바르지 않습니다. Solaris 버전 10까지이와 같은 전통적인 실제 Bourne 쉘을 제공합니다 /bin/sh. 이는 다른 쉘에서 실패할 수 있는 이전 스크립트와의 호환성을 중단하기 위해 수행되지 않습니다. 그러나 그 이상으로 선택은 꽤 실망스럽습니다.

전부는 아니지만 대부분의 나머지 Unix 및 Unix 유사 버전(Solaris 11 포함)은 POSIX 호환 쉘을 제공합니다. 왜냐하면 /bin/shPOSIX에서는 sh이전의 호환되지 않는 Bourne 쉘이 아닌 POSIX 쉘을 시작하는 명령이 필요하기 때문입니다. /bin/sh일반적으로:

  • ksh88또는 ksh93상용 Unix 구현에서
  • 수정 됨(예전에는 bash그랬지만 )OS/Xzsh
  • ash둘 중 하나 pdksh의 파생물BSDs
  • bash또는 dashGnu/Linux 배포판에서도 가능합니다.

링크일 필요는 없지만 Gnu/Linux 이외의 많은 시스템에서 실제 실행 파일이 될 수 있습니다.

흥미롭게도 귀하의 질문에 대한 가장 많은 지지를 받은 답변에도 불구하고 배포판 개발자가 이전 Bourne 셸과 다른 것을 설치하도록 유도하는 것은 기능 부족이 아니라 /bin/sh가능한 한 POSIX와 호환되기를 원하는 것입니다. 즉, Unix 운영 체제처럼 동작합니다. 체계. POSIX 쉘이 이전 Bourne 쉘보다 더 많은 기능을 가지고 있다는 사실은 이 표준 준수 목표의 부작용일 뿐입니다.

bash일부 쉘은 호출될 때 다르게 동작하며 sh, 이는 그 반대가 아닌 대부분 쉘에서 기능을 제거한다는 점에 주목할 가치가 있습니다 .

답변3

내가 아는 한, 원래 Bourne 쉘은 라이센스 때문에 BSD 및 GNU 프로젝트에서 사용할 수 없습니다.

원래 Unix에는 당시 라이센스가 없었고 GNU 프로젝트에는 GPL에 따라 쉘이 필요했기 때문에 bash를 사용했습니다.

모든 BSD의 부모인 BSD4의 경우에도 마찬가지입니다. AT&T의 소송으로 인해 그들은 Bourne 셸을 포함하여 원래 Unix의 모든 소스 코드를 다시 작성해야 했습니다.

기존 BSD 시리즈에서 Bourne 쉘은 4.3BSD-Reno까지 사용 가능했습니다(그러나 Net/2 및 후속 4.4BSD에서는 더 이상 사용할 수 없습니다). 라이센스상의 이유로 이후 Kenneth Almquist(종종 ash라고 함)의 bourne 호환 svr4 유사 sh로 대체되었습니다.

FreeBSD에서man sh

Thompson 쉘인 sh 명령은 AT&T UNIX 버전 1에 등장했습니다. 버전 7 AT&T UNIX에서는 sh라는 이름을 물려받은 Bourne 쉘로 대체되었습니다.

이 sh 버전은 AT&T System V 릴리스 4 UNIX Bourne 쉘을 기반으로 하는 BSD 라이센스에 따라 1989년에 다시 작성되었습니다.

따라서 두 프로젝트 모두 Bourne 셸을 사용하지 않고 진정한 오픈 소스 셸을 선택해야 했습니다.

답변4

100% 제공합니다하위 호환성. 원래 셸에 있던 어떤 것도 잃지 않지만 그 위에 훨씬 더 많은 기능을 얻을 수 있습니다. 단점도 없는데 왜 새로운 기능을 놓칠까요? 이는 /bin/vi일반적으로 다음과 같은 이유와 같습니다..

관련 정보