zsh의 어떤 기능이 bash에서 누락되었거나 그 반대입니까?


62

리눅스 사용자는 항상 bash를 사용했습니다. BSD와 같은 다른 유닉스 시스템을 사용하는 사람들은 다른 쉘을 훨씬 더 자주 사용하는 것 같습니다. 조금 더 배우기 위해 zsh를 사용해보기로 결정했습니다.

bash 사용자로서 :

  • 어떤 기능을 놓칠 수 있습니까?
  • 그리고 어떤 것을 찾아야합니까?


5
언젠가는 사람들이 여기로 이사 모두가 좋을 ... 그리고 수도 @Gilles 합병
xenoterracide

답변:


45

다른 Stack Exchange 사이트의 주제에 대해서는 이미 약간의 활동이있었습니다. bash에서 zsh로 전환 한 경험 (몇 년 전 ²)은 한 가지도 놓치지 않았다는 것입니다. 나는 많은 것을 얻었습니다. 내가 가장 많이 사용하는 간단한 zsh 관련 기능은 다음과 같습니다.

  • 때때로 bash를 사용할 때 가장 그리워하는 zsh 기능은 autocd입니다. zsh에서 디렉토리를 실행한다는 것은 옵션을 설정 한 경우 디렉토리 변경을 의미합니다 autocd.

  • 또 다른 유용한 기능은 멋진 글러브입니다. 상형 문자 (같이가 상당 작성하는 것보다 그들을 찾아하는 것이 더 빠른 기억하기 어렵지만 매우 편리 조금 있습니다 find명령). 간단한 예제 몇 :
        foo*~*.bak= 모든 일치를 위해 foo*그 일치를 제외 *.bak
        foo*(.)= 정규 파일이 일치 foo*
        foo*(/)= 디렉토리에만 일치 foo*
        foo*(-@)=에만 심볼릭 링크의 일치 foo*
        foo*(om[1,10])=를 최근 10 개 개의 파일이 일치 foo*
        foo*(Lm+1)= 크기>가 1MB 파일 만 = 디렉토리에 와 모든를 재귀 적으로 서브 디렉토리
        dir/**/foo*foo*dir

  • 멋진 이름 바꾸기를 위해 zmv내장 기능이 편리 할 수 ​​있습니다. 예를 들어, 모두 filefile.bak다음 에 복사 하려면 :zmv -C '(*)(#q.)' '$1.bak'

  • bash와 zsh에는 모두 명시 적으로 ( . /etc/bash_completion또는 autoload -U compinit; compinit) 켜야하는 적절한 완료 시스템이 있습니다 . Zsh는 훨씬 더 구성 가능하며 일반적으로 더 환상적입니다.

로 zsh를 실행 .zshrc하면 대화식 메뉴가 시작되어 구성 옵션을 선택할 수 있습니다. (일부 배포판에서는이 기능을 비활성화 할 수 있습니다.이 경우에는 실행하십시오 autoload zsh-newuser-install; zsh-newuser-install.) 권장 기록 옵션을 활성화하고 (“새 스타일”) 완료를 설정하고를 제외하고“공통 쉘 옵션”을 켜는 것이 좋습니다 beep. 나중에 더 많은 옵션을 발견하면 구성하십시오.

² 당시 프로그램 가능한 완성은 zsh의 킬러 기능 이었지만 bash는 곧 그것을 얻었습니다.
전용 버전 4에서 획득 비난 기능 (그래서 여전히 많은 시스템에서 사용할 수 없습니다) 작은 타입에 있습니다.


5
Bash 4.0은 이제 autocd위에서 설명한 기능을 지원합니다 . 명령을 사용하여 기능을 활성화하십시오 shopt -s autocd. 그런 다음 설명 된대로 기능이 작동합니다.
Philluminati

zsh where에는 which명령 과 혼동하지 않도록 내장 명령이 있습니다.
Sildoreth

@EdGrimm 나는 GNU와 FreeBSD가 할 수있는 찾을 생각 zsh을 글로브 예선이 (로 할 수있는 모든 것을 -exec가진 선택 같은 것들에 대한 쉘의 e와 같은 도구로 파이프 라인 sortsed함께 다시 작성을 위해 e및 정렬). 물론 더 간결하게.
Gilles

찾기 맨 페이지를 10 년 이상 확인하고 다시 확인한 후, 나는 정말로보고 그만 두었다고 생각합니다. 그러나 주석을 달기 전에 마지막으로 하나를 확인했다면 적어도 -size 옵션이 이제 단위를 바이트 단위로 줄이는 것을 보았을 것입니다.
Ed Grimm

11

또한 기본 탭 완성은 bash보다 낫습니다 ... 예를 들어 ...

~/.e.d탭은 ~/.emacs.d/zsh로 확장되고 bash는 경고음을냅니다.


하지 않았다. 기본 setopt옵션이 아닌 옵션을 사용합니까?

_-.와일드 카드로 설정 했다는 것을 깨달았습니다 . zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' .
ocodo

10

zshbash는 여러 줄 명령을 편집 할 수 있습니다 ( zsh line editor 참조 ). 동일한 트릭 ( Ctrl-p) 을 시도하면 bash는 마지막 명령을 가져옵니다.


2
Bash는 적어도 4.2.37 버전 에서이 작업을 수행합니다. 개행을 세미콜론으로 바꾸고 편집 할 한 줄을 제공합니다.
Keith Thompson

1
여전히 좋지 않습니다. (:
SilverWolf

8

Bash에는 다음을 사용하여 포트를 열 수있는 기능이 있습니다

/dev/tcp/host/port

또는

/dev/udp/host/port

그러나 데비안에서는 방해가되고 (경로가 실제로 존재한다면) 쉘이해야하는 범위 밖에서 비활성화되어 있습니다. 더 많은 정보 [데비안 메일 링리스트]


5
zsh에는 ztcp가 내장되어 있지만 bash의 / dev / tcp보다 많은 기능이 있으며 / dev / udp는 없습니다. 나는 오히려 socat을 사용하려고합니다.
Stéphane Chazelas

2

어느-zsh에서 향상

whichbash 의 명령은 명령의 위치 만 나타냅니다.

Zsh에서는 which의 정의 alias, a의 소스 function및 명령의 위치를 ​​보여줍니다.

쉘 별명이 있다고 가정 해 봅시다.

alias gg='git log'

Bash에서 요청 which gg하면 결과는 무효가됩니다.

Zsh에서 : which gg우리에게 줄 것이다 ...

gg: aliased to git log

쉘 함수가 있다고 가정 해 봅시다.

hello() {
    echo "Hello World"
}

Bash에서 우리가 물었다 which hello면 결과는 무효가 될 것입니다.

Zsh에서 : which hello우리에게 줄 것이다 ...

hello() {
    echo "Hello World"
}

Bash는 type(내장) 명령을 통해 동일한 기능을 제공합니다 . 그리고 nitpick : which은 bash 내장이 아닌 외부 명령입니다.
Torkel Bjørnson-Langen


0

zsh-완전한 쉘

을 통해 읽기, 많은 거기에 zshcontrib(1)두 가지 버전 감지 할 수있는 하나의 autoload-able tetris게임 (와 다른 ncurses에) zsh와 경쟁 emacs(설명) 완성도.

=

내가 언급하고 싶습니다 =에 자극을 일으킬 수있는 키워드 curl(URL이 보통이있어 ?var=val그들을,하지만 그것이 unsetopt-able, 내 생각)

  • q file =less( gentoo)는q file $(which less)

= 해당 명령의 전체 경로로 확장됩니다.

다른 케이크

마음에 들지 않는 다른 것들은 올바른 스타일 ( 스타일 RPS1=%d로 표시 $PWD), 즉 Alt + H( run-helpman,), Alt + ? ( which-command) vared, 및 zed( autoload함수), Emacs의 미니 버퍼와 같은 Alt + X위젯, 전역 및 접미사 별명을 바인딩하지 않고 위젯을 실행하는 것입니다. 확장 이력 추적 명령 완료 기간 -m-regex정합 기, 쉘 에뮬레이션 (예. csh, kshemulate)과 autoload run-help내장 기능의 파일 조각과 함께.

예레미야 애가

나는 전부는 아니지만 대부분의 기능이 오래 전에 구현되었고, 변경 로그를 통해 읽을 때 주요 변경 사항과 새로운 기능 추가 사항이 없다고 생각합니다.

bash(와는 반대로 ) 리눅스 정신에 더 많이 분포 된 것처럼 보인다 . (유지로 예 readline에 기능과 키 바인딩 세계적 적용 가능 하고 떠들썩한 파티 관련하여 재정의되지 않은 경우) .readlinezlegnu history~/.inputrc/etc/inputrcbind

결론

나는 개인적으로 생각한다 emacs(?). (현재의 전망에서 ESP emacs-nox와 같은 뛰어난 소프트웨어에 대한 영감있는 맛) zshtmux같은 구현의 예있는 아주 좋은 일을했다; 가치를 높이 평가하는 사람들에게 ( X서버 가 필요하지 않거나 의존하지 않는 수준까지 ). 유닉스 쉘은 충분히 강력하며, 연속성과 일관성은 (전체 컴퓨팅에서) 적절한 워크 플로우와 생산성을 위해 충분합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.