ProgramingTip

Bash 또는 KornShell (ksh)?

bestdevel 2020. 12. 2. 21:43
반응형

Bash 또는 KornShell (ksh)?


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

순전히 스크립팅이 아닌 사용자의 관점에서 이해하려고합니다.


세게 때리다.

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

bash를 사용하면 단일 코드 기반 확인 수 있고 걱정할 것이 bash의 (일반적으로 최소) 버전이 단일 것뿐입니다. 거의 모든 현대적 (그리고 그다지 현대적이지 않은) UNIX에서 많은 스크립팅을 수행 한 결과, bash 프로그래밍은 내 경험에서보다 안정적으로 일관됩니다.


Kornshell과 Bash의 차이는 미미합니다. 하나가 다른 것보다 더 많은 이점이 있습니다.

  • BASH는 현재 디렉토리를 표시하는 프롬프트를 설정하는 것이지만. Kornshell에서 동일한 작업을 수행하는 것은 끔찍합니다.
  • Kornshell에는 연관 배열이 없습니다. 이제 마지막으로 연관 배열을 분석 ... 생각 해보자 ... 절대로.
  • Kornshell은 루프 구문을 조금 더 잘 처리합니다. 일반적으로 Kornshell 루프에서 값을 설정하고 루프 나중에 사용할 수 있습니다.
  • Bash는 파이프에서 종료 코드를 더 깔끔하게 처리합니다.
  • Kornshell은 print훨씬 더 나은 echo명령이 있습니다.
  • Bash는 탭 완성 기능이 있습니다. 이전 버전에서
  • 콘 셸에는 r이전 명령을 빠르게 다시 실행할 수 있는 역사 명령이 있습니다.
  • 콘 셸 구문이 cd old new대체 oldnew저기 디렉토리와 CD에 있습니다. 라는 디렉토리에있을 때 편리 /foo/bar/barfoo/one/bar/bar/foo/bar하고 /foo/bar/barfoo/two/bar/bar/foo/barKornshell로 이동해야 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에 익숙한 기능이 대부분 알고 있습니다. (더 이상 많이 배포되지 않았습니다.)

대화 형 사용을 위해 필요에 맞는 것을 선택하십시오. 실험. 나는 대화식 사용과 프로그래밍을 위해 쉘을 사용할 수 있습니다.

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 유닉스도 분할로 인해 쓸모없고 모든 줄 바꿈 (및 기타 동작)을 인쇄하지 않는 자체 규칙을 도입했습니다. 그 결과는 여전히 많은 '구성'서비스에서 볼 수 있습니다.

Ksh는 이에 대해 급진적 인 접근 방식을 취하고 print실제로 두 가지 방법 ( -nBSD 옵션 및 \cSYSV 의 후행 특수 문자)을 지원 하는 명령을 도입했습니다.

그러나 심각한 시스템 프로그래밍의 경우 python, perl과 같은 쉘 이외의 것을 권장합니다. 또는 한 단계 더 나아가 puppet과 같은 플랫폼을 사용하여 시스템의 전체 클러스터 상태를 잘보고 있습니다.

쉘 프로그래밍은 미지의 물에서 수영하는 것과 같거나 더 나 좋습니다.

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


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

개인적으로 저는 항상 ksh를 사용하고 vi 완성을 좋아하며 모든 작업에 Solaris를 거의 사용합니다.


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

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


스크립트의 경우 개는를 부드럽게 처리하기 때문에 항상 KSH를 사용 합니다.

하지만 bash 는 대화 형 사용에 더 편합니다. 저에게는 emacs 키 바인딩과 탭 완성이 주요 이점입니다. 그러나 그것은 대부분의 습관의 힘이며 ksh의 문제가 아닙니다 .


뿡뿡

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


제 대답은 '하나를 골라서 사용법을 배우십시오'입니다. 둘 다 괜찮은 껍질입니다. bash는 아마도 더 많은 종소리와 휘파람을 가지고 있지만 둘 다 당신이 원하는 기본 기능을 가지고 있습니다. bash는 요즘 더 보편적으로 사용 가능합니다. Linux를 항상 사용하고 있다면 계속 사용하십시오.

프로그래밍하는 경우 이식성을 위해 평범한 'sh'를 고수하는 것이 좋은 습관이지만 요즘에는 bash가 널리 사용 가능하므로 약간의 조언은 아마도 약간 구식 일 것입니다.

완성과 쉘 히스토리를 사용하는 방법을 배우십시오. 가끔 맨 페이지를 읽고 몇 가지 새로운 것을 배우십시오.


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

Z 쉘 은 ksh의 고유 한 기능과 bash가 제공하는 멋진 기능과 그 위에 더 많은 기능이 잘 결합되어 있습니다.


대부분의 UNIX 시스템에서 사용할 수있는 ksh는 표준을 준수하고 명확하게 설계되었으며 다방면으로 제공됩니다. 나는 책, ksh의 도움이 충분하고 명확하다고 생각합니다. 특히 O'Reilly 책. Bash는 질량입니다. 나는 집에서만 Linux의 루트 로그인 쉘로 유지합니다.

대화식 사용을 위해 Linux / UNIX에서 zsh를 선호합니다. zsh에서 스크립트를 실행하지만 대부분의 스크립트와 AIX ksh의 함수를 테스트합니다.


Bash는 벤치 마크이지만 대부분의 경우 모든 * nix에 설치되어 있다고 합리적으로 확신 할 수 있기 때문입니다. 스크립트를 배포 할 계획이라면 Bash를 사용하십시오.

불행히도 셸 간의 실제 프로그래밍 차이점을 실제로 해결할 수는 없습니다.


Bash 는 Linux의 표준입니다.
내 경험으로는 ksh 또는 csh보다 bash에 대한 도움말을 찾는 것이 더 쉽다는 것입니다.

참고 URL : https://stackoverflow.com/questions/74844/bash-or-kornshell-ksh

반응형