it-swarm-ko.tech

배쉬 또는 KornShell (ksh)?

나는 * nix를 처음 사용하지는 않지만 최근에 프롬프트에서 많은 시간을 보냈습니다. 내 질문은 KornShell (ksh) 또는 Bash Shell을 사용하면 어떤 이점이 있습니까? 하나를 다른 것보다 사용하는 함정은 어디에 있습니까?

순수한 스크립팅보다는 사용자의 관점에서 이해하려고합니다.

59
user13158

세게 때리다.

다양한 UNIX 및 Linux 구현에는 ksh의 다양한 소스 레벨 구현이 있으며,이 중 일부는 실제 ksh이고, 일부는 pdksh 구현이며, 일부는 "ksh"특성을 가진 다른 Shell에 대한 심볼릭 링크입니다. 이로 인해 실행 동작에 이상한 차이가 발생할 수 있습니다.

적어도 bash를 사용하면 단일 코드베이스인지 확인할 수 있으며 bash의 버전 (보통 최소) 버전 만 걱정하면됩니다. 현대의 (그리고 현대적이지 않은) 모든 유닉스에서 많은 스크립팅을 해본 결과, bash 프로그래밍은 내 경험에서보다 안정적으로 일관됩니다.

46
j.e.hahn

Kornshell과 Bash의 차이는 최소화됩니다. 하나는 다른 것보다 장점이 있지만 차이점은 매우 작습니다.

  • BASH는 현재 디렉토리를 표시하는 프롬프트를 설정하는 것이 훨씬 쉽습니다. Kornshell에서 동일한 작업을 수행하는 것은 hackish입니다.
  • Kornshell에는 연관 배열이 있고 BASH에는 없습니다. 마지막으로 연관 배열을 사용한 것은 ...
  • Kornshell은 루프 구문을 조금 더 잘 처리합니다. 일반적으로 Kornshell 루프에서 값을 설정하고 루프 후에 사용할 수 있습니다.
  • Bash는 파이프에서 종료 코드를 깔끔하게 가져옵니다.
  • Kornshell에는 print 명령보다 나은 echo 명령이 있습니다.
  • 배쉬에는 탭 완성이 있습니다. 이전 버전에서
  • Kornshell에는 이전 명령을 빠르게 다시 실행할 수있는 r history 명령이 있습니다.
  • Kornshell은 cd old new 구문을 사용하여 디렉토리의 oldnew로 바꾸고 그 위에 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는 이제 단순히 셸의 선택이므로 무언가를 배워야하는 경우 인기있는 것과 함께 갈 수 있습니다.

122
David W.

저는 곤셀 베테랑입니다. 그래서 저는 그런 관점에서 말하는 것을 알고 있습니다.

그러나 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 이외의 것을 권장합니다. 또는 한 걸음 더 나아가 꼭두각시와 같은 플랫폼을 사용하면 감사 기능을 통해 전체 시스템 클러스터 상태를보고 수정할 수 있습니다.

쉘 프로그래밍은 미지의 물에서 수영하는 것과 비슷합니다.

모든 언어로 프로그래밍하려면 구문, 인터페이스 및 동작에 익숙해야합니다. 쉘 프로그래밍은 다르지 않습니다.

28
Henk Langeveld

이것은 약간의 유닉스 대 리눅스 전투입니다. 대부분의 Linux 배포판에 bash가 설치되어 있고 ksh는 선택 사항입니다. Solaris, AIX 및 HPUX와 같은 대부분의 Unix 시스템에는 기본적으로 ksh가 있습니다.

개인적으로 나는 항상 ksh를 사용하고 vi 완료를 좋아하며 모든 것을 위해 Solaris를 거의 사용합니다.

4
Kristian

스크립트의 경우 gotchas 보다 매끄 럽기 때문에 항상 ksh 를 사용합니다.

그러나 나는 대화식 사용에 더 편안한 bash 를 발견했습니다. 나에게 emacs 키 바인딩과 탭 완성이 주요 이점입니다. 그러나 그것은 ksh 의 기술적 인 문제가 아닌 습관의 힘입니다.

4
Jon Ericson

Ksh에 대한 경험이 없지만 bash와 zsh를 모두 사용했습니다. 매우 강력한 파일 글 로빙, 변수 확장 수정 자 및 더 빠른 탭 완성을 지원하기 때문에 bash보다 zsh를 선호합니다.

다음은 간단한 소개입니다. http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-Shell-youll-ever-need/

4
Chris AtLee

내 대답은 '하나를 고르고 사용법을 배우십시오'입니다. 둘 다 괜찮은 껍질입니다. bash는 더 많은 종과 휘파람을 가지고 있지만 둘 다 원하는 기본 기능을 가지고 있습니다. bash는 요즘 더 보편적으로 사용 가능합니다. 리눅스를 항상 사용한다면, 그냥 고수해라.

프로그래밍하는 경우 이식성을 위해 일반 'sh'를 고수하는 것이 좋은 습관이지만 요즘 널리 사용되는 bash를 사용하면 조언이 약간 구식입니다.

완성과 셸 기록을 사용하는 방법을 배우십시오. 맨 페이지를 가끔 읽고 몇 가지 새로운 것을 배우십시오.

3
Incident

fox

실제로 표준 Shell은 Bourne Shell (sh)입니다. Linux에서 /bin/sh는 실제로 bash이지만 크로스 플랫폼 스크립트를 목표로하는 경우 원래 Bourne Shell의 기능을 고수하거나 Perl.

3
Hank Gay

우선 bash에는 탭 완성 기능이 있습니다. 이것만으로도 ksh보다 선호하기에 충분합니다.

Z Shell ksh의 고유 한 기능과 bash가 제공하는 Nice 기능 및 그 밖의 많은 기능이 잘 결합되어 있습니다.

2
Allen

대부분의 UNIX 시스템에서 사용할 수있는 ksh는 표준을 준수하며 명확하게 설계되었으며 균형이 잘 잡혀 있습니다. 나는 책, ksh의 도움이 충분하고 명확하며 특히 오라일리 책이라고 생각합니다. 배쉬는 질량입니다. 나는 집에서 리눅스의 루트 로그인 쉘로 유지합니다.

대화식으로 사용하려면 Linux/UNIX에서 zsh를 선호합니다. zsh에서 스크립트를 실행하지만 AIX ksh에서 대부분의 스크립트, 함수를 테스트합니다.

2
MeaCulpa