it-swarm-ko.tech

zsh에는 어떤 기능이 있고 bash에서 누락 된 기능은 무엇입니까?

Linux 사용자로서 저는 bash가 제가 사용한 모든 배포판의 기본값이기 때문에 항상 방금 사용했습니다. BSD와 같은 다른 Unix 시스템을 사용하는 사람들은 훨씬 더 자주 다른 쉘을 사용하는 것 같습니다. 좀 더 배우기 위해 zsh를 사용해보기로했습니다.

Bash 사용자 :

  • 내가 놓칠 수있는 기능은 무엇입니까?
  • 그리고 나는 무엇을 찾아야합니까?
63
Macha

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

  • 내가 가끔 bash를 사용할 때 가장 놓친 zsh 기능은 autocd입니다. zsh에서 autocd 옵션을 켜면 디렉토리를 실행하면 디렉토리가 변경됩니다 .⁴

  • 또 다른 매우 유용한 기능은 멋진 글 로빙입니다. 그만큼 상형 문자문자는 기억하기가 약간 어렵지만 매우 편리합니다 (에서와 같이 동등한 find 명령을 작성하는 것보다 검색하는 것이 더 빠릅니다). 몇 가지 간단한 예 :
    foo*~*.bak = foo*와 일치하는 항목을 제외한 모든 *.bak 일치
    foo*(.) = foo*와 일치하는 일반 파일 만
    foo*(/) = foo*와 일치하는 디렉토리 만
    foo*([email protected]) = foo*와 일치하는 매달린 기호 링크 만
    foo*(om[1,10]) = foo*와 일치하는 가장 최근 파일 10 개
    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는 훨씬 더 구성 가능하고 일반적으로 더 멋집니다.

.zshrc없이 zsh를 실행하면 구성 옵션을 선택할 수있는 대화 형 메뉴가 시작됩니다. (일부 배포판에서는이 기능을 비활성화 할 수 있습니다.이 경우 autoload zsh-newuser-install; zsh-newuser-install를 실행합니다.) 권장 내역 옵션을 활성화하고 ( "새 스타일") 완성 기능을 활성화 한 다음 beep을 제외한 "공통 셸 옵션"을 활성화하는 것이 좋습니다. . 나중에 검색 할 때 더 많은 옵션을 구성하십시오.

²그 당시에는 프로그래밍 가능한 완성이 zsh의 킬러 기능 이었지만 bash는 곧이를 획득했습니다.
Bash가 버전 4에서만 획득 한 기능 (따라서 여전히 많은 시스템에서 사용할 수 없음)은 더 작은 유형입니다.

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

~/.e.d TAB은 zsh에서 ~/.emacs.d/로 확장되고 bash는 신호음 만 울립니다.

11
ocodo

zsh에서는 여러 줄 명령을 편집 할 수 있지만 ( zsh 줄 편집기 참조) bash는 그렇지 않습니다. 같은 트릭 (Ctrl-p), bash는 마지막 명령을 가져옵니다.

10
Pedro Silva

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

/dev/tcp/Host/port

또는

/dev/udp/Host/port

그러나 데비안에서는 장애 (경로가 실제로 존재하는 경우)로 간주되고 쉘이 수행해야하는 작업의 범위를 벗어나기 때문에 비활성화됩니다. 추가 정보 [데비안 메일 링리스트]

8
Portablejim

어느-zsh에서 향상됨

Bash의 which 명령은 명령의 위치 만 표시합니다.

Zsh에서 whichalias의 정의, function의 소스 및 명령의 위치를 ​​표시합니다.

Shell 별칭이 있다고 가정 해 보겠습니다.

alias gg='git log'

Bash에서 다음과 같이 질문하면 : which gg 결과는 무효입니다.

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

gg: aliased to git log

Shell 함수가 있다고 가정 해 보겠습니다.

hello() {
    echo "Hello World"
}

Bash에서 다음과 같이 질문하면 : which hello 결과는 무효가됩니다.

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

hello() {
    echo "Hello World"
}
2
ocodo