태그 보관물: zsh

zsh

zsh보다 bash를 사용해야 할 이유가 있습니까? [닫은] 실행하려는 이유가 궁금합니다. zsh는 bash와 완전히 호환됩니다.

zsh 대신 bash를 실행하려는 이유가 궁금합니다. zsh는 bash와 완전히 호환됩니다. 나를 잘못 생각하지 마라 : 나는 bash 나 다른 것을 싫어하지 않는다. zsh보다 그것을 사용할 때 어떤 이점이 있는지 진정으로 알고 싶습니다.

zsh보다 bash를 사용해야하는 이유는 무엇입니까?



답변

두 가지 이유가 생각납니다.

첫째, 거의 모든 곳에서 사용할 수 있습니다. zsh가 설치되지 않은 여러 Linux 시스템 (이 경우 CentOS 4.x)이 있습니다. 마찬가지로 Solaris 2.6 이상, HP-UX 10 이상 및 유사하게 삐걱 거리는 AIX 버전과 같은 고대 시스템을 다루어야합니다. 따라서 나는이 컴퓨터에서 bash를 사용해야합니다. 한 달 동안 수백 개가 아닌 수십 개의 개별 컴퓨터를 만지기 때문에 인터페이스가 일관성을 유지하기 위해 기본값.

둘째, 실제로 모든 곳에서 사용할 수 있습니다. 이것은 bash 쉘 스크립트를 작성할 수 있고 다른 곳으로 전송 될 때 작동한다는 것을 99 % 확신합니다.

그렇습니다. 이러한 이유는 표면적으로 동일하지만 그 이유는 다릅니다.


답변

배쉬는 일반적으로 모든 시스템과 함께 제공되며 zsh는 그렇지 않습니다. zsh를 좋아하지만이 때문에 zsh를 대화 형으로 사용하지만 Bash는 모든 스크립팅에 사용 합니다.

bash 호환 (setopt SH_WORD_SPLIT?)을 쇼핑 할 때도 여전히 미묘한 차이가 있기 때문에 이것이 모든 것을 더 간단하게 유지한다는 것을 알았습니다.


답변

zsh는 bash와 완전히 호환되지 않습니다. 다양한 차이점이 있습니다. 최신 zsh는 bash (= ~ 지원, exec에 추가 플래그 옵션 등이 있음)와 더 호환되지만 “emulate”에서도 전체 호환성이 목표가 아닙니다.

예를 들어, bash 하위 문자열은 $ {foo : offset : len}이지만 zsh에서는 $ foo [start, end]이며 간단한 예입니다.

zsh는 tcsh 및 ksh에 영향을받는 쉘로 자체적으로 많은 작업을 수행합니다. POSIX 호환성은 명시 적으로 목표는 아니지만 개발자는 POSIX에 더 가까이 접근하는 옵션 / 모방 동작을 추가하는 패치에 반응합니다. 그러나 실제로 쉘의 기능을 시작하면 bash보다 쓰기 전용 스크립트를 작성하기 시작합니다.

bash는 POSIX sh + ksh + pedanticism이며 일부 기능은 이제 zsh에서 복사되었습니다. 쓰기 전용 스크립트도 있지만 강력한 연산자가 없기 때문에 zsh의 간결성을 사용하지 않고 결과를 더 읽을 있습니다 (공백 분할을 피하기 위해 모든 인용을 제외하고 바보 같은 ksh 스타일 $ array는 먼저 의미합니다) -배열 요소, 모든 요소 배열 등이 아님).

제한된 환경에 있지 않는 한 (예 : 일부 FS가 마운트되지 않은 시스템 rc 스크립트 작성 등) 쉘 중 하나의 기능을 최대한 활용하는 스크립트 작성은 현명하지 않습니다. 이상적으로, Perl / Python / Ruby / 무엇이든지 다른 사람들이 그것을 유지하기를 원한다면 Bourne sh에없는 표현력이 필요할 정도로 큰 것을 사용하십시오. 대화식 쉘 (탭 완성 프로그래밍 등)에 관련된 쉘 항목을 유지하십시오.

zsh보다 bash를 사용하지 않습니다. 간단한 스크립트를 위해 zsh 대신 bare sh를 사용하거나 연관 배열에 적절한 연산자가있는 언어로 전환합니다 (zsh와 달리 ‘간결한’). 나는 수도 나는 하나 개의 작은 기능은 기존의 검증 된 가공 스크립트를 확장하고 지금 다시 할 시간이없는 것을 필요로하는 경우 배쉬에 쉬 스크립트를 전환합니다.


답변

내 충고 : 절대 이식성을 원한다면 Bourne 쉘 규칙을 사용하여 작성하고 Korn 쉘 확장을 방해하지 마십시오. 언급했듯이, GNU 쉘이 전혀없는 오래된 “큰 상자”입니다.

배쉬는 이미 “너무 많이”합니다. 직장에서 zsh를 선호하는 친구가 있지만 정확히 무엇을하는지 모르겠습니다.

어쨌든 Bourne (또는 “bourne again”) 셸을 쓰거나 소수의 특정 상자에 대한 사용자 지정 스크립트를 수행하는 경우 “shell hell”을 완전히 건너 뛰고 perl 또는 python (또는 기타 가장 좋아하는 지역 통역사가 있습니다).


답변

위에 제공된 이식성 이유 외에도 bash가 여전히 기능을 추가하고있을 수 있습니다.

예를 들어 bash v4.x + 는 다음을 도입했습니다.

  • 재귀 globbing :

    rm -f ** / *. log

  • autocd :

    “cd / tmp”대신 “/ tmp”를 입력하십시오.


답변

그건 그렇고, 여기에서 bash가 실제로 모든 곳에서 발견된다는 말을 여러 번 들었습니다.이를 사용하여 이식 가능한 스크립트를 작성하십시오.

무의미한 말. 관심있는 모든 시스템에 BASH가 있다는 것을 알고 있다면 완벽하게 합리적입니다. BASH에는 POSIX sh에서 합리적으로 에뮬레이션 할 수없는 많은 유용한 기능이 있습니다. POSIX 이외의 기능을 많이 사용하는 것은 좋은 생각은 아니지만 실제로 필요할 때 사용하는 것이 좋습니다.

이식성이 절대적인 것은 아닙니다. 다른 것과 마찬가지로 얼마나 멀리 가야하는지 논란의 여지가 있습니다. 예를 들어, Fedora는 RPM 패키지를 빌드하기 위해 쉘 명령을 사용하고 Fedora 패키징 지침은 모든 패키지가 Fedora에서 기본적으로 빌드되어야하므로 BASH의 모든 기능을 사용하는 것이 좋습니다. 이론적으로 BASH가없는 다른 배포판에서 소스 RPM을 재사용하고 싶을 수도 있지만 “ALWAYS UZE POSIX !! 1″만트라 대신 실용성을 기반으로 이식성에 대한 결정을 내 렸습니다.

ZSH는 단순히 반쯤 구운 아이디어의 엉망으로 인해 기본 쉘로 잡히지 않았습니다.


답변

그런데, 여기에 여러 번 들었습니다 bash그래서 휴대용 스크립트를 작성하는 데 사용, 실질적으로 모든 곳에서 발견을 false입니다 .

휴대용 유닉스 스크립트를 작성하는 올바른 방법 은 모든 * nix 시스템에서 볼 수있는 사용 sh하는 것 입니다 .

제외한 다른 모든 쉘 sh은 일상적인 대화식 도구입니다.

오는 때 bashzshbash더에 번들로 제공되는 *nixes것보다 zsh, 그래서 여기에 시스템에 추가 소프트웨어를 설치하는 단점이 온다 – 당신은 그것을 유지해야합니다. 어떤 사람들은 zsh “멋진 기능”을 좋아하기 때문에 그 가격을 지불하는 것을 좋아합니다.