Linux 사용자로서 저는 bash가 제가 사용한 모든 배포판의 기본값이기 때문에 항상 방금 사용했습니다. BSD와 같은 다른 Unix 시스템을 사용하는 사람들은 훨씬 더 자주 다른 쉘을 사용하는 것 같습니다. 좀 더 배우기 위해 zsh를 사용해보기로했습니다.
Bash 사용자 :
이미 다른 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
내장 기능이 유용 할 수 있습니다. 예를 들어 모든 file
를 file.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는 신호음 만 울립니다.
zsh
에서는 여러 줄 명령을 편집 할 수 있지만 ( zsh 줄 편집기 참조) bash는 그렇지 않습니다. 같은 트릭 (Ctrl-p
), bash는 마지막 명령을 가져옵니다.
Bash에는 다음을 사용하여 포트를 열 수있는 기능이 있습니다.
/dev/tcp/Host/port
또는
/dev/udp/Host/port
그러나 데비안에서는 장애 (경로가 실제로 존재하는 경우)로 간주되고 쉘이 수행해야하는 작업의 범위를 벗어나기 때문에 비활성화됩니다. 추가 정보 [데비안 메일 링리스트]
Bash의 which
명령은 명령의 위치 만 표시합니다.
Zsh에서 which
는 alias
의 정의, 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"
}