리눅스 사용자는 항상 bash를 사용했습니다. BSD와 같은 다른 유닉스 시스템을 사용하는 사람들은 다른 쉘을 훨씬 더 자주 사용하는 것 같습니다. 조금 더 배우기 위해 zsh를 사용해보기로 결정했습니다.
bash 사용자로서 :
- 어떤 기능을 놓칠 수 있습니까?
- 그리고 어떤 것을 찾아야합니까?
리눅스 사용자는 항상 bash를 사용했습니다. BSD와 같은 다른 유닉스 시스템을 사용하는 사람들은 다른 쉘을 훨씬 더 자주 사용하는 것 같습니다. 조금 더 배우기 위해 zsh를 사용해보기로 결정했습니다.
bash 사용자로서 :
답변:
다른 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
내장 기능이 편리 할 수 있습니다. 예를 들어, 모두 file
를 file.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에서 획득 비난 기능 (그래서 여전히 많은 시스템에서 사용할 수 없습니다) 작은 타입에 있습니다.
autocd
위에서 설명한 기능을 지원합니다 . 명령을 사용하여 기능을 활성화하십시오 shopt -s autocd
. 그런 다음 설명 된대로 기능이 작동합니다.
where
에는 which
명령 과 혼동하지 않도록 내장 명령이 있습니다.
-exec
가진 선택 같은 것들에 대한 쉘의 e
와 같은 도구로 파이프 라인 sort
과 sed
함께 다시 작성을 위해 e
및 정렬). 물론 더 간결하게.
zsh
bash는 여러 줄 명령을 편집 할 수 있습니다 ( zsh line editor 참조 ). 동일한 트릭 ( Ctrl-p
) 을 시도하면 bash는 마지막 명령을 가져옵니다.
Bash에는 다음을 사용하여 포트를 열 수있는 기능이 있습니다
/dev/tcp/host/port
또는
/dev/udp/host/port
그러나 데비안에서는 방해가되고 (경로가 실제로 존재한다면) 쉘이해야하는 범위 밖에서 비활성화되어 있습니다. 더 많은 정보 [데비안 메일 링리스트]
which
bash 의 명령은 명령의 위치 만 나타냅니다.
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"
}
type
(내장) 명령을 통해 동일한 기능을 제공합니다 . 그리고 nitpick : which
은 bash 내장이 아닌 외부 명령입니다.
을 통해 읽기, 많은 거기에 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-help
즉 man
,), Alt + ? ( which-command
) vared
, 및 zed
( autoload
함수), Emacs의 미니 버퍼와 같은 Alt + X위젯, 전역 및 접미사 별명을 바인딩하지 않고 위젯을 실행하는 것입니다. 확장 이력 추적 명령 완료 기간 -m
및 -regex
정합 기, 쉘 에뮬레이션 (예. csh
, ksh
와 emulate
)과 autoload
run-help
내장 기능의 파일 조각과 함께.
나는 전부는 아니지만 대부분의 기능이 오래 전에 구현되었고, 변경 로그를 통해 읽을 때 주요 변경 사항과 새로운 기능 추가 사항이 없다고 생각합니다.
bash
(와는 반대로 ) 리눅스 정신에 더 많이 분포 된 것처럼 보인다 . (유지로 예 readline에 기능과 키 바인딩 세계적 적용 가능 하고 떠들썩한 파티 관련하여 재정의되지 않은 경우) .readline
zle
gnu history
~/.inputrc
/etc/inputrc
bind
나는 개인적으로 생각한다 emacs
(?). (현재의 전망에서 ESP emacs-nox
와 같은 뛰어난 소프트웨어에 대한 영감있는 맛) zsh
과 tmux
같은 구현의 예있는 아주 좋은 일을했다; 가치를 높이 평가하는 사람들에게 ( X
서버 가 필요하지 않거나 의존하지 않는 수준까지 ). 유닉스 쉘은 충분히 강력하며, 연속성과 일관성은 (전체 컴퓨팅에서) 적절한 워크 플로우와 생산성을 위해 충분합니다.