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

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

주류 *NIX 쉘의 근본적인 차이점은 무엇입니까? 어떤 상황에서 다른 것을 사용하도록 유도할 수 있나요? 이 중 일부는 사용자 선호도에 따라 달라질 수 있다는 것을 알고 있지만 Bash만 사용해 본 적이 있으며 다른 셸이 어디에 유용할지 알아보고 싶습니다.

또한 하나의 셸 또는 다른 셸에서 실행될 때 사용자가 작성한 셸 스크립트에 어떤 영향을 미치나요, 아니면 파일 상단의 셸만 변경합니까? 내 직감은 쉽지 않을 것이라고 말합니다.

답변1

대화형 사용에는 두 가지 주요 경쟁자가 있습니다.불다그리고다루기 힘든, 그리고 낙오자tcsh그리고 새로 온 사람들물고기.

  • Bash는 GNU 프로젝트의 공식 셸이자 대부분의 Linux 배포판의 기본 셸입니다. 기본 설치의 일부로 적절한 대화형 쉘이 제공되지 않는 다른 유니스에서는 사람들이 자체 강화 "Bash는 어디에나 있으므로 나도 사용할 것입니다" 루프에서 Bash를 선택하는 경향이 있다고 생각합니다. 당신은 또한 볼 수 있습니다Bash는 왜 어디에나 있나요?(역사적인 내용이 많습니다.)

  • Zsh는 Bash의 거의 모든 기능과 그 이상의 기능을 갖추고 있습니다(유용합니다!). 가장 큰 단점은 잘 알려져 있지 않다는 것입니다. 즉, 다른 사람이 설정한 시스템에 설치된 것을 발견할 가능성이 적고 이에 대한 타사 문서가 적다는 것을 의미합니다. 당신은 또한 볼 수 있습니다zsh의 어떤 기능을 사용하시나요?,Bash에서 누락된 zsh에서 누락된 기능은 무엇이며, 그 반대의 경우도 마찬가지입니까?,Bash와 Zsh의 실제 차이점은 무엇입니까?.

  • Tcsh는 (1990년대 초반까지) 이전 csh와 마찬가지로 최고의 대화형 기능을 갖춘 셸이었습니다. 이로 인해 대화형 사용이 인기를 얻었습니다(그러나스크립팅용이 아님). Zsh는 tcsh를 따라잡고 곧 더 발전했고, Bash는 2000년대 초반에 따라잡았고(프로그래밍 기능을 통해 수행됨), tcsh는 지난 15년 동안 거의 진전이 없었습니다. 그러니 지금은 tcsh를 배울 이유가 없습니다.

  • Fish는 전임자보다 더 깨끗해지려고 노력합니다. 여기에는 몇 가지 깔끔한 기능(더 간단한 구문, 명령줄의 구문 색상 지정)이 있지만 다른 기능(작성자가 마음에 들지 않는 기능)이 부족합니다. 물고기 커뮤니티는 zsh 커뮤니티보다 훨씬 작기 때문에 영향이 더욱 심각합니다.


스크립팅의 경우 스크립트의 이식성을 원하는 정도에 따라 여러 언어를 대상으로 할 수 있습니다.

  • 유닉스 계열인 척하는 모든 것에는로 파생된 쉘이 주변 /bin/sh에 일부 상업용 유닛이 있습니다./bin/shPOSIX준수하다.

  • 오늘날 실행되는 거의 모든 UNIX에는 sh최소한 POSIX.2-1992를 준수하고 일반적으로 최소한POSIX: 2001(일명 Single Unix v3). 쉘은 /usr/bin/posix또는 와 같은 다른 디렉토리에 있을 수 있습니다 /usr/xpg6/bin. POSIX 에뮬레이션 계층은 이를 지원할 만큼 강력한 거의 모든 시스템에 존재하므로 매력적인 대상이 됩니다.

  • 많은 UNIX 시스템에는크쉬 93이는 POSIX sh에는 없는 몇 가지 매우 유용한 기능(배열, 연관 배열, 확장 글로브( *(foo), @(foo|bar), …), 널 글로브( ~(N)foo*), …)을 제공합니다. Ksh는 상용 소프트웨어로 시작했으며(일부 습관이 형성된 후 2000년에 무료가 됨) 많은 무료 유니스(Linux, *BSD)는 오래된 무료 클론(*)만 제공하는 습관을 갖게 되었습니다.PDKSH)에는 이러한 유용한 기능이 많이 부족합니다. Pdksh는 현재 진행 중입니다.므케시OpenBSD 외부에서는 mksh조차도 모든 ksh93 기능을 구현하지 않습니다. 요즘에는 ksh93을 어디에서나 사용할 수 있을 것으로 기대할 수 없습니다. 특히 Bash가 표준인 Linux에서는 더욱 그렇습니다.

  • 불다Linux에서는 항상 사용할 수 있으며(일부 임베디드 변형 제외) 일반적으로 다른 유닉스에서도 사용할 수 있습니다. 때로는 다른 구문을 사용하기는 하지만 ksh93의 유용한 기능을 대부분 갖추고 있습니다.

  • 지쉬ksh93 및 Bash의 유용한 기능을 대부분 갖추고 있습니다. 핵심 구문은 더 깔끔하지만 Bourne과 호환되지 않습니다. macOS를 제외하고, 설치하지 않은 시스템에서 zsh를 사용할 수 있을 것이라고 기대하지 마십시오.

  • 더 고급 스크립팅을 원하시면 다음을 참조하세요.진주또는파이썬. 이러한 언어는 적절한 데이터 구조, 우수한 텍스트 조작 기능, 우수한 프로세스 구성 및 통신 메커니즘, 사용 가능한 수많은 라이브러리를 갖추고 있습니다. 대부분의 UNIX 시스템에는 운영 체제와 함께 번들로 제공되거나 관리자가 설치한 스크립트가 있습니다(Perl 및 Python 스크립트가 너무 많아서 최소한 하나 이상을 갖고 있는 시스템이 거의 없기 때문입니다).

답변2

쉘에는 sh(예: bash)와 csh(예: tcsh)의 두 가지 기본 유형이 있습니다. 대화형 사용의 경우 이는 주로 습관에 따라 다릅니다. 나는 수년 동안 csh와 tcsh를 사용해 왔고 너무 익숙해서 전환하는 것이 어려울 것입니다. 나는 또한 bash를 사용했는데 전환해야 할 강력한 이유가 없습니다. 정기적으로 사용하는 컴퓨터에서 그 중 하나를 사용할 수 없는 경우는 제외됩니다.

프로그래밍의 경우 구문이 다릅니다. 쉘만 변경할 수는 없으며 스크립트 구문도 변경해야 합니다. 스크립팅을 위해서는 sh 또는 bash를 사용해야 합니다. 설명했듯이 구문은 스크립팅에 더 적합합니다.여기(감사해요리카르도 머리링크용. 이건 좋은거야가이드Bash 스크립트 정보.

아직 쉘을 사용하기로 결정하지 않았고 일부 스크립트를 작성하고 싶다면 배워야 할 내용의 양을 줄이기 위해 bash를 사용할 것입니다.

답변3

AT&T가 UNIX를 발명하던 시절, Steve Bourne이 작성한 Bourne Shell이 ​​있었습니다. 그것은 매우 기본적이었고 현재 우리가 당연하게 여기는 많은 도구가 부족했습니다.

당시 AT&T는 실제로 UNIX 사업을 하고 있지 않았기 때문에 Berkeley는 매우 기본적인 운영 체제를 채택하여 BSD UNIX에 몇 가지 변경 사항을 적용했습니다. 많은 변경 사항 중에는 작업 제어, 더 나은 대화식 사용 등을 포함하여 sh에 비해 많은 개선이 이루어진 csh라는 새로운 셸이 있습니다. 불행하게도 그들은 sh 프로그래밍 구문이 끔찍하다고 생각하여 C 코딩 스타일을 (다소 형편없게) 복사한 자체 구문을 만들었습니다. (고전적인 불만은http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) 이제 두 가지 구문이 있습니다.

나중에 CSH를 개선하여 탭 완성 및 기타 몇 가지 기능을 추가했습니다. 이는 tcsh가 되며, CSH를 사용하는 경우 아마도 사용하게 될 것입니다.

AT&T는 UNIX 사업에서 완전히 벗어났다고 생각하지 않으며 이를 개선하고 있습니다. David Korn(좋은 사람)이 Korn 쉘을 만들었습니다. Bourne 쉘 구문을 확장한다는 아이디어를 기반으로 프로그래머와 대화형 사용을 위해 많은 기능을 추가합니다. 실제로 여러 버전이 있으며 변형을 나타내는 ksh88 및 ksh93과 같은 항목을 거의 볼 수 없습니다.

그런 다음 FSF와 GNU 운영 체제가 나왔습니다. 그들은 Hurd라고 불리는 자신만의 UNIX 호환 운영 체제를 만들고 싶었고 이를 위한 더 나은 셸을 제공하기를 원했습니다. 그들은 bash를 Bourne Again SHell이라고 부릅니다. POSIX 규칙은 이 무렵에 나왔고 그들은 만들고 싶었습니다.이것POSIX 쉘. 그들은 Bourne 쉘의 구문과 Korn 쉘의 개선 사항을 살펴보고 채택했으며, tcsh의 대화형 기능을 훔쳐 확장했습니다. 이는 Linux에서 사실상의 쉘이 되었기 때문에 매우 일반적이었습니다.

"궁극적인" 쉘로 알려진 zsh도 있습니다. 이는 Linux 세계에서도 매우 일반적입니다. 그것은 bash를 확장합니다(그리고 일부 교차 수분을 통해 일부 새로운 내용이 bash로 다시 들어옵니다).

쉘을 선택해야 한다면 bash나 zsh를 선택하겠습니다. bash는 아마도 zsh보다 더 많은 곳에 존재할 것입니다. zsh가 더 강력하지만 bash는 나에게 좋습니다. 실제 /bin/sh Bourne 쉘은 역사적인 이유로만 존재합니다. bash에는 ksh가 제공하는 거의 모든 기능과 그 이상을 갖추고 있습니다. 구문은 csh나 tcsh보다 더 명확하고 기능도 더 좋습니다.

변환 스크립트는 어디에서 시작되는지에 따라 다릅니다. Bourne 쉘 스타일(sh, ksh, bash, zsh)과 csh 스타일(csh, tcsh) 간의 변환은 어려울 수 있습니다. 이전 버전에서 새 버전으로(/bin/sh => bash, /bin/ksh => zsh) 이동하는 것이 그 반대보다 쉽습니다.

답변4

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

나는 zsh가 적어도 예전에는 더 많은 사용자 정의 옵션을 가지고 있다고 생각합니다. 그러나 수년 동안 zsh를 사용한 후에는 안정성과 문자 인코딩 문제가 충분히 발생했습니다. Bash는 견고하며 이와 같은 문제가 발생하지 않았으며 모든 곳에 설치됩니다.

관련 정보