나는 * nix를 처음 사용하지는 않지만 최근에 프롬프트에서 많은 시간을 보냈습니다. 내 질문은 KornShell (ksh) 또는 Bash Shell을 사용하면 어떤 이점이 있습니까? 하나를 다른 것보다 사용하는 함정은 어디에 있습니까?
순수한 스크립팅보다는 사용자의 관점에서 이해하려고합니다.
세게 때리다.
다양한 UNIX 및 Linux 구현에는 ksh의 다양한 소스 레벨 구현이 있으며,이 중 일부는 실제 ksh이고, 일부는 pdksh 구현이며, 일부는 "ksh"특성을 가진 다른 Shell에 대한 심볼릭 링크입니다. 이로 인해 실행 동작에 이상한 차이가 발생할 수 있습니다.
적어도 bash를 사용하면 단일 코드베이스인지 확인할 수 있으며 bash의 버전 (보통 최소) 버전 만 걱정하면됩니다. 현대의 (그리고 현대적이지 않은) 모든 유닉스에서 많은 스크립팅을 해본 결과, bash 프로그래밍은 내 경험에서보다 안정적으로 일관됩니다.
Kornshell과 Bash의 차이는 최소화됩니다. 하나는 다른 것보다 장점이 있지만 차이점은 매우 작습니다.
print
명령보다 나은 echo
명령이 있습니다.r
history 명령이 있습니다.cd old new
구문을 사용하여 디렉토리의 old
를 new
로 바꾸고 그 위에 CD를 넣습니다. /foo/bar/barfoo/one/bar/bar/foo/bar
라는 디렉토리에 있고 /foo/bar/barfoo/two/bar/bar/foo/bar
로 cd해야 할 때 편리합니다. Kornshell에서는 간단히 cd one two
를 수행하면됩니다. BASH에서는 cd ../../../../../two/bar/bar/foo/bar
가되어야합니다.저는 1990 년대에 유닉스를 배웠기 때문에 오래된 Kornshell 녀석이었습니다. 그리고 그것은 당시 선택한 셸이었습니다. 나는 Bash를 사용할 수 있지만 습관적으로 Kornshell이 가지고있는 BASH 가하지 않고 작동하지 않는 몇 가지 사소한 기능을 사용하기 때문에 때때로 좌절합니다. 따라서 가능한 한 Kornshell을 기본값으로 설정했습니다.
그러나 BASH를 배우라고 말할 것입니다. Bash는 이제 대부분의 Unix 시스템과 Linux에서 구현되며 Kornshell보다 BASH를 배우고 도움을 얻는 데 더 많은 리소스가 있습니다. BASH에서 이국적인 일을 해야하는 경우 Stackoverflow로 이동하여 질문을 게시하면 몇 분 안에 12 가지 답변을 얻을 수 있으며 일부는 정확합니다!.
Kornshell 질문이 있고 Stackoverflow에 게시하는 경우 답변을 받기 전에 낮잠에서 깨어 난 것처럼 과거의 주요 해커를 지나서 오래 기다려야합니다. 그리고 그날 노년층에서 푸딩을 제공하는 경우 응답을받지 마십시오.
BASH는 이제 단순히 셸의 선택이므로 무언가를 배워야하는 경우 인기있는 것과 함께 갈 수 있습니다.
저는 곤셀 베테랑입니다. 그래서 저는 그런 관점에서 말하는 것을 알고 있습니다.
그러나 Bourne Shell, ksh88 및 ksh93에 익숙해졌으며 어떤 기능이 지원되는지 알고 있습니다. 더 이상 널리 배포되지 않으므로 ksh88을 건너 뛰어야합니다.
대화식으로 사용하려면 필요에 맞는 것을 취하십시오. 실험. 대화식 사용 및 프로그래밍에 동일한 셸을 사용할 수 있습니다.
SVR2의 ksh88에서 tcsh, ksh88Sun (상당한 국제화 지원이 추가됨) 및 ksh93으로 이동했습니다. 나는 bash를 시도했고 내 역사가 평평 해졌 기 때문에 싫어했다. 그런 다음 shopt -s lithist
를 발견하고 모두 잘되었습니다. lithist
옵션을 사용하면 명령 기록에 줄 바꿈이 유지됩니다.
쉘 프로그래밍의 경우, 내장 함수로 많은 공통 유닉스 명령을 사용할 수 있기 때문에 일관된 프로그래밍 언어, 우수한 POSIX 준수 및 우수한 성능을 원한다면 ksh93을 강력하게 권장합니다.
이식성을 원하면 둘 다 사용하십시오. 그리고 테스트 스위트가 좋은지 확인하십시오.
쉘 간에는 미묘한 차이점이 많이 있습니다. 예를 들어 파이프에서 읽는 것을 고려하십시오.
b=42 && echo one two three four |
read a b junk && echo $b
이것은 다른 쉘에서 다른 결과를 생성합니다. korn-shell은 파이프 라인을 뒤에서 앞으로 실행합니다. 파이프 라인의 마지막 요소는 현재 프로세스에서 실행됩니다. Bash는 v4.x까지이 유용한 동작을 지원하지 않았으며, 그 이후에도 기본값이 아닙니다.
일관성을 보여주는 또 다른 예 : echo
명령 자체는 BSD와 SYSV 유닉스 사이의 분리로 인해 사용되지 않으며 각각 개행 (및 기타 동작)을 인쇄하지 않는 자체 규칙을 도입했습니다. 이 결과는 여전히 많은 'configure'스크립트에서 볼 수 있습니다.
Ksh는 그것에 급진적 인 접근을하여 실제로 두 가지 방법 (BSD의 -n
옵션과 SYSV의 후행 \c
특수 문자)을 지원하는 print
명령을 도입했습니다.
그러나 심각한 시스템 프로그래밍의 경우 Python, Perl과 같은 Shell 이외의 것을 권장합니다. 또는 한 걸음 더 나아가 꼭두각시와 같은 플랫폼을 사용하면 감사 기능을 통해 전체 시스템 클러스터 상태를보고 수정할 수 있습니다.
쉘 프로그래밍은 미지의 물에서 수영하는 것과 비슷합니다.
모든 언어로 프로그래밍하려면 구문, 인터페이스 및 동작에 익숙해야합니다. 쉘 프로그래밍은 다르지 않습니다.
이것은 약간의 유닉스 대 리눅스 전투입니다. 대부분의 Linux 배포판에 bash가 설치되어 있고 ksh는 선택 사항입니다. Solaris, AIX 및 HPUX와 같은 대부분의 Unix 시스템에는 기본적으로 ksh가 있습니다.
개인적으로 나는 항상 ksh를 사용하고 vi 완료를 좋아하며 모든 것을 위해 Solaris를 거의 사용합니다.
스크립트의 경우 gotchas 보다 매끄 럽기 때문에 항상 ksh 를 사용합니다.
그러나 나는 대화식 사용에 더 편안한 bash 를 발견했습니다. 나에게 emacs 키 바인딩과 탭 완성이 주요 이점입니다. 그러나 그것은 ksh 의 기술적 인 문제가 아닌 습관의 힘입니다.
Ksh에 대한 경험이 없지만 bash와 zsh를 모두 사용했습니다. 매우 강력한 파일 글 로빙, 변수 확장 수정 자 및 더 빠른 탭 완성을 지원하기 때문에 bash보다 zsh를 선호합니다.
다음은 간단한 소개입니다. http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-Shell-youll-ever-need/
내 대답은 '하나를 고르고 사용법을 배우십시오'입니다. 둘 다 괜찮은 껍질입니다. bash는 더 많은 종과 휘파람을 가지고 있지만 둘 다 원하는 기본 기능을 가지고 있습니다. bash는 요즘 더 보편적으로 사용 가능합니다. 리눅스를 항상 사용한다면, 그냥 고수해라.
프로그래밍하는 경우 이식성을 위해 일반 'sh'를 고수하는 것이 좋은 습관이지만 요즘 널리 사용되는 bash를 사용하면 조언이 약간 구식입니다.
완성과 셸 기록을 사용하는 방법을 배우십시오. 맨 페이지를 가끔 읽고 몇 가지 새로운 것을 배우십시오.
fox
실제로 표준 Shell은 Bourne Shell (sh
)입니다. Linux에서 /bin/sh
는 실제로 bash
이지만 크로스 플랫폼 스크립트를 목표로하는 경우 원래 Bourne Shell의 기능을 고수하거나 Perl
.
우선 bash에는 탭 완성 기능이 있습니다. 이것만으로도 ksh보다 선호하기에 충분합니다.
Z Shell ksh의 고유 한 기능과 bash가 제공하는 Nice 기능 및 그 밖의 많은 기능이 잘 결합되어 있습니다.
대부분의 UNIX 시스템에서 사용할 수있는 ksh는 표준을 준수하며 명확하게 설계되었으며 균형이 잘 잡혀 있습니다. 나는 책, ksh의 도움이 충분하고 명확하며 특히 오라일리 책이라고 생각합니다. 배쉬는 질량입니다. 나는 집에서 리눅스의 루트 로그인 쉘로 유지합니다.
대화식으로 사용하려면 Linux/UNIX에서 zsh를 선호합니다. zsh에서 스크립트를 실행하지만 AIX ksh에서 대부분의 스크립트, 함수를 테스트합니다.