it-swarm-ko.tech

주류 * NIX 쉘의 근본적인 차이점은 무엇입니까?

주류 * NIX 셸의 근본적인 차이점은 무엇이며 어떤 시나리오를 사용하라는 메시지가 표시됩니까? 나는 아마도 그중 일부가 사용자 선호에 달려있을 것이라고 이해하지만 bash 만 사용했으며 다른 셸이 유용한 곳을 듣고 싶습니다.

또한 하나의 셸 또는 다른 셸에서 실행할 때 사용자 작성 셸 스크립트에 영향을 미치거나 단순히 파일 맨 위에서 셸을 변경하는 것입니까? 내 본능은 그렇게 쉽지 않다고 말합니다.

52
conorgriffin

대화식으로 사용하기 위해 bashzsh 의 두 가지 주요 경쟁자가 있으며, 스 트래 글러 tcsh 및 새로 온 사람 fish .

  • Bash는 GNU 프로젝트의 공식 셸이며 대부분의 Linux 배포판에서 기본 셸입니다. 기본 설치의 일부로 괜찮은 대화 형 셸과 함께 제공되지 않는 다른 유닉스에서는 bash가 생각됩니다. 사람들이 자기 강화에서“배쉬는 어디에나 있으므로 너무 사용하겠습니다”루프에서 사람들이 선택하는 경향은 무엇입니까? 또한 참조하십시오 왜 어디에서 배쉬가 있습니까? (많은 역사적 정보가있는).

  • Zsh에는 거의 모든 bash 기능과 더 많은 (유용한) 기능이 있습니다. 주요 단점은 잘 알려져 있지 않기 때문에 실제 문제는 다른 사람이 설정 한 시스템에 이미 설치되어 있지 않을 가능성이 적으며 이에 대한 타사 설명서가 적다는 것입니다. 어떤 zsh 기능을 사용하십니까? , zsh에 어떤 기능이 있으며 bash에서 누락되었거나 그 반대입니까? .

  • Tcsh는 한때 (1990 년대 초까지) 이전 csh와 같은 최고의 대화식 기능을 갖춘 Shell이었습니다. 그것은 대화식 사용에 인기가있었습니다 (그러나 스크립트 사용 아님 ). Zsh는 tcsh를 따라 잡았고 상당히 빠르게 개선되었으며, 2000 년대 초에 bash는 (프로그래밍이 완료된 상태) 따라 잡았지만 tcsh는 지난 15 년간 거의 발전하지 못했습니다. 그러므로 지금 tcsh를 배울 이유가 거의 없습니다.

  • 물고기는 이전의 물고기보다 깨끗해 지려고합니다. 깔끔한 기능 (단순한 구문, 명령 줄의 구문 색상 표시)이 있지만 다른 기능은 없습니다 (작성자가 싫어하는 것). 물고기 공동체는 zsh보다 훨씬 작기 때문에 그 효과는 더욱 심각합니다.


스크립팅의 경우 스크립트의 이식성에 따라 여러 언어를 타겟팅 할 수 있습니다.

  • 유닉스처럼 가장 한 것은 Bourne -derived Shell을 /bin/sh로 가지고 있습니다. /bin/sh POSIX 을 준수하지 않는 상용 unice가 여전히 있습니다.

  • 거의 모든 현재 실행중인 유닉스에는 최소한 POSIX.2-1992와 호환되며 최소한 POSIX : 2001 a.k.a. Single Unix vsh 실행 파일이 있습니다. 이 셸은 /usr/bin/posix 또는 /usr/xpg6/bin와 같은 다른 디렉토리에있을 수 있습니다. 또한 POSIX 에뮬레이션 계층은이를 지원할만큼 강력한 모든 시스템에 존재하므로 매력적인 대상이됩니다.

  • 많은 유닉스 시스템에는 ksh9 이 있는데, 이는 POSIX sh에없는 유용한 기능을 제공합니다 (배열, 연관 배열, 확장 된 글로브 (*(foo), @(foo|bar),…) , null globs (~(N)foo*),…). Ksh 처음에는 상용 소프트웨어였으며 (일부 습관이 정립 된 후 2000 년에 무료로 제공됨), 많은 무료 유닉스 (Linux, * BSD)는 훨씬 오래된 무료 복제본 만 제공하는 습관을들이 었습니다. ( pdksh ) 이러한 유용한 기능이 많이 부족합니다 .Pdksh는 이제 OpenBSD 외부에서 mksh 로 대체되지만 mksh조차도 모든 ksh93 기능을 구현하지 못합니다. ksh93이 모든 곳에서 사용 가능하며, 특히 bash가 표준 인 Linux에서는 중요하지 않습니다.

  • Bash 는 Linux (일부 내장 변형 제외)와 다른 유니 세에서 항상 사용할 수 있습니다. ksh93의 유용한 기능은 대부분 있지만 때로는 다른 구문을 사용합니다.

  • Zsh 에는 ksh93과 bash의 유용한 기능이 대부분 있습니다. 핵심 구문은 깔끔하지만 Bourne과 호환되지 않습니다. macOS를 제외하고는 설치하지 않은 시스템에서 zsh를 사용할 수 있다고 생각하지 마십시오.

  • 고급 스크립팅의 경우 Perl 또는 Python 으로 설정할 수 있습니다. 이러한 언어에는 적절한 데이터 구조, 적절한 텍스트 조작 기능, 적절한 프로세스 조합 및 통신 메커니즘 및 사용 가능한 수많은 라이브러리가 있습니다. 대부분의 유닉스 시스템은 OS와 함께 번들로 제공되거나 관리자가 설치합니다 (Perl과 Python 스크립트가 너무 많기 때문에 하나 이상이없는 드문 시스템이기 때문에) 각각).

Shell에는 sh (예 : bash)와 csh (예 : tcsh)의 두 가지 기본 맛이 있습니다. 대화식 사용의 경우 주로 익숙한 것에 달려 있습니다. 나는 몇 년 동안 csh를 사용한 다음 tcsh를 사용해 왔으며 너무 익숙해지기 때문에 전환하기가 어려울 것입니다. 나는 bash도 사용했으며 전환해야 할 이유가 없다고 생각합니다. 정기적으로 사용하는 기계에서 하나 또는 다른 것을 사용할 수없는 경우를 제외하고.

프로그래밍의 경우 구문이 다릅니다. 셸만 변경할 수는 없지만 스크립트 구문도 변경해야합니다. 스크립팅의 경우 sh 또는 bash를 사용하려고합니다. 링크에 대해 here ( Riccardo Murri 에 설명 된 것처럼 구문은 스크립팅에 훨씬 더 적합합니다. bash 스크립팅에서 좋은 guide 입니다.

셸을 결정하지 않고 스크립트를 작성해야하는 경우 배쉬를 사용하여 배우는 데 필요한 양을 줄입니다.

27
KeithB

예전에는 AT & T가 UNIX를 발명했을 때 Steve Bourne이 작성한 Bourne Shell이있었습니다. 그것은 꽤 기본적이며 오늘날 우리가 당연한 것으로 생각하는 많은 도구가 부족했습니다.

AT & T는 실제로 UNIX 비즈니스에 포함되지 않았으므로 현재 Berkelely는 기본 OS를 다소 채택하여 BSD UNIX를 일부 변경했습니다. 많은 변경 사항 중 csh라는 새로운 셸이 있었는데, 이는 작업 제어의 대화식 사용 향상 등을 포함하여 sh보다 많은 기능이 향상되었습니다. 불행히도, 그들은 sh 프로그래밍 구문을 빨아 들여 결정하고 C 코딩 스타일에서 복사 한 자신 만의 (어쩌면 나쁘게) 만들었습니다. (클래식 rant는 http://www.faqs.org/faqs/unix-faq/Shell/csh-whynot/ ) 이제 두 가지 구문이있었습니다.

나중에 그들은 탭 완성과 다른 것들을 추가하여 CSH를 개선했습니다. 이것은 tcsh가되었으며 CSH를 사용한다면 아마도 이것이 당신이 사용하는 것일 것입니다.

AT & T는 이것이 유닉스 비즈니스에서 완전히 벗어나지 않았다고 결정하고 그것을 연마했습니다. David Korn (Nice guy)은 Korn Shell을 만들었습니다. Bourne Shell 구문을 확장한다는 아이디어를 바탕으로 프로그래머와 대화식 사용 모두에 많은 것을 추가했습니다. 실제로 몇 가지 버전이 있으며 변형을 나타내는 ksh88 및 ksh93과 같은 것을 거의 볼 수 없습니다.

그런 다음 FSF와 GNU OS)가 왔습니다. 그들은 유닉스 (Hurd)라는 유닉스 호환 OS를 만들고 싶었고, 더 나은 셸을 원했습니다. 이쯤에 와서 그들은 the POSIX Shell을 만들고 싶었습니다. 그들은 Bourne Shell의 구문과 Korn Shell의 개선 사항을 취하고 tcsh의 대화 형 기능을 훔치고 확장했습니다. 그것은 리눅스에서 사실상 쉘이되었으므로 매우 일반적입니다.

'궁극적 인'쉘로 작성된 zsh도 있습니다. Linux 세계에서도 매우 일반적입니다. 그것은 bash를 확장했습니다 (그리고 약간의 수분을 교차 시켰습니다, 새로운 것들이 bash로 돌아갔습니다).

셸을 선택하려면 bash 또는 zsh를 선택하십시오. bash는 zsh보다 몇 군데 더있을 수 있습니다. zsh가 더 강력하지만 bash는 나에게 좋았습니다. 실제/bin/sh Bourne Shell은 역사적인 이유로 사용됩니다. bash는 ksh가 제공하는 모든 것을 제공합니다. 구문은 csh 또는 tcsh보다 깨끗하며 둘 중 하나보다 나은 기능을 가지고 있습니다.

스크립트를 변환하는 것은 무엇에서 무엇에 달려 있습니다. Bourne Shell 스타일 (sh, ksh, bash, zsh)과 csh 스타일 (csh, tcsh) 사이는 어렵습니다. 이전 방식에서 최신 방식 (/ bin/sh => bash,/bin/ksh => zsh)으로 전환하는 것이 다른 방법보다 쉽습니다.

12
Rich Homolka

쉘의 두 가지 주요 분기는 Bourne Shell 파생 상품 (sh, bash, ksh, ash, yash 및 zsh)과 csh 파생 상품 (tcsh 및 ... uhm ... tcsh)입니다.

Bash가 가장 널리 사용되는 것으로 생각하지만 (실제 숫자는 없지만) 대부분의 Linux에서 기본 셸 인 것 같습니다.

하나의 Bourne Shell 파생물로 작성된 대부분의 작업은 다른 작업에서 작동합니다. Bourne Shell로 작성된 대부분의 항목은 csh 또는 tcsh에서 실행되도록 수정해야합니다.

개인적으로 나는 사용중인 시스템에 있었기 때문에 처음 시작할 때 ksh를 사용했습니다. 나는 주로 bash를 사용한다.

8
mazianni

나는 시간이 지남에 따라 수많은 껍질을 사용했습니다. 초 고급은 아니지만 충분한 사용자 정의가 필요한 실용적인 시스템 관리자 및 프로그래밍 기능이 많이 있습니다.

Zsh에는 적어도 이전에는 더 많은 사용자 정의 옵션이 있다고 생각하지만 몇 년 동안 사용한 후에는 안정성 및 문자 인코딩 문제로 충분했습니다. 배쉬는 견고하고 비슷한 문제가 없으며 어디에나 설치됩니다.

1
Ari T