문제

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

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

도움이 되었습니까?

해결책

세게 때리다.

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

적어도 bash를 사용하면 그것이 단일 코드 기반이라는 것을 확신할 수 있으며, 걱정해야 할 것은 어떤 버전(보통 최소)의 bash가 설치되어 있느냐 하는 것뿐입니다.거의 모든 현대식(그리고 그다지 현대적이지 않은) UNIX에서 많은 스크립팅을 수행한 결과, 내 경험상 bash 프로그래밍이 더 안정적으로 일관되었습니다.

다른 팁

Kornshell과 Bash의 차이는 미미합니다.하나가 다른 것보다 확실한 장점이 있지만 차이점은 아주 작습니다.

  • BASH는 현재 디렉토리를 표시하는 프롬프트를 설정하는 것이 훨씬 쉽습니다.Kornshell에서 동일한 작업을 수행하는 것은 해킹입니다.
  • Kornshell에는 연관 배열이 있지만 BASH에는 없습니다.제가 마지막으로 연관 배열을 사용한 것은...생각해보자...절대.
  • Kornshell은 루프 구문을 좀 더 잘 처리합니다.일반적으로 Kornshell 루프에서 값을 설정하고 루프 후에 사용할 수 있도록 할 수 있습니다.
  • Bash는 더 깔끔한 방식으로 파이프에서 종료 코드 가져오기를 처리합니다.
  • Kornshell은 print 명령보다 훨씬 나은 명령 echo 명령.
  • Bash에는 탭 완성 기능이 있습니다.이전 버전에서는
  • Kornshell은 r 이전 명령을 빠르게 다시 실행할 수 있는 기록 명령입니다.
  • Kornshell에는 다음 구문이 있습니다. cd old new 이는 대체 old ~와 함께 new 당신의 디렉토리와 거기 CD에 있습니다.라는 디렉토리에 있으면 편리합니다. /foo/bar/barfoo/one/bar/bar/foo/bar 그리고 당신은 CD를해야합니다 /foo/bar/barfoo/two/bar/bar/foo/bar Kornshell에서는 간단히 다음을 수행할 수 있습니다. cd one two 그리고 끝내세요.BASH에서는 다음을 수행해야 합니다. cd ../../../../../two/bar/bar/foo/bar.

나는 1990년대에 Unix를 배웠고 그 당시에는 그것이 선택의 쉘이었기 때문에 오래된 Kornshell 사용자입니다.Bash를 사용할 수 있지만 습관적으로 Kornshell에는 있지만 BASH에는 없고 작동하지 않는 일부 사소한 기능을 사용하기 때문에 때때로 좌절감을 느낍니다.그래서 가능할 때마다 Kornshell을 기본값으로 설정했습니다.

하지만 BASH를 배우라고 말씀드리고 싶습니다.Bash는 이제 대부분의 Unix 시스템과 Linux에서 구현되며 BASH를 배우고 도움을 받는 데 사용할 수 있는 리소스가 Kornshell보다 더 많습니다.BASH에서 색다른 작업을 수행해야 하는 경우 Stackoverflow에 가서 질문을 게시하면 몇 분 내에 12개의 답변을 얻을 수 있으며 그 중 일부는 정확할 수도 있습니다!

Kornshell 질문이 있고 Stackoverflow에 게시하면 답변을 받기 전에 나 같은 과거의 주요 해커가 낮잠에서 깨어날 때까지 기다려야 합니다.그리고 그날 노인 집에서 푸딩을 대접하고 있다면 어떤 반응도 받지 마세요.

BASH는 이제 선택의 셸이므로 무언가를 배워야 한다면 인기 있는 것을 선택하는 것이 좋습니다.

나는 옥수수 껍질 베테랑이므로 그런 관점에서 말하고 있다는 것을 알아 두십시오.

그러나 나는 Bourne Shell, ksh88 및 ksh93에 익숙하며 어떤 기능이 어떤 기능에서 지원되는지 가장 잘 알고 있습니다.(ksh88은 더 이상 널리 배포되지 않으므로 여기서는 건너뛰어야 합니다.)

대화형으로 사용하려면 필요에 맞는 것을 선택하세요.실험.나는 대화형 사용과 프로그래밍에 동일한 셸을 사용할 수 있다는 점을 좋아합니다.

저는 SVR2의 ksh88에서 tcsh, ksh88sun(상당한 국제화 지원 추가) 및 ksh93으로 전환했습니다.나는 bash를 시도했고, 그것은 내 역사를 평평하게했기 때문에 그것을 미워했다.그러다가 나는 발견했다 shopt -s lithist 모든 것이 잘되었습니다.(그만큼 lithist 옵션은 새로운 명령 기록에 Newlines가 보존되어 있음을 보장합니다.)

쉘 프로그래밍의 경우, 많은 일반 Unix 명령을 내장 함수로 사용할 수 있으므로 일관된 프로그래밍 언어, 우수한 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는 이에 대해 급진적인 접근 방식을 취했습니다. print 실제로 두 가지 방법을 모두 지원하는 명령( -n BSD의 옵션과 후행 \c SYSV의 특수 문자)

그러나 심각한 시스템 프로그래밍의 경우 Python, Perl과 같은 쉘 이외의 것을 권장합니다.또는 한 단계 더 나아가 Puppet과 같은 플랫폼을 사용하면 우수한 감사를 통해 전체 시스템 클러스터의 상태를 관찰하고 수정할 수 있습니다.

쉘 프로그래밍은 미지의 바다에서 수영하는 것과 같거나 그보다 더 나쁜 것입니다.

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

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

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

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

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

스크립트의 경우 항상 사용합니다. 크쉬 부드러워지기 때문에 문제.

하지만 난 찾아냈어 세게 때리다 대화식 사용에 더 편안합니다.나에게는 이맥스 키 바인딩과 탭 완성이 주요 이점입니다.하지만 이는 기술적인 문제가 아니라 대부분 습관의 힘입니다. 크쉬.

@foxxtrot

실제로 표준 쉘은 Bourne 쉘(sh). /bin/sh Linux에서는 실제로 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가 벤치마크이지만 이는 대부분 Bash가 모든 *nix에 설치되어 있다고 합리적으로 확신할 수 있기 때문입니다.스크립트를 배포할 계획이라면 Bash를 사용하세요.

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

세게 때리다 리눅스의 표준이다.
내 경험에 따르면 ksh나 csh보다 bash에 대한 도움말을 찾는 것이 더 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top