Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash 쉘의 탄생

셸 스크립팅은 sysadmin 유형의 역할에 있는 모든 사람에게 필수적인 분야이며 오늘날 사람들이 스크립트를 작성하는 주된 셸은 Bash입니다. Bash는 거의 모든 Linux 배포판과 최신 MacOS 버전에서 기본으로 제공되며 곧 Windows 터미널의 기본 부분이 될 예정입니다. Bash는 어디에나 있습니다.

어떻게 이 지경에 이르렀습니까? 이번 주 Command Line Heroes 팟캐스트에서는 코드를 작성한 바로 ​​그 사람들에게 질문하여 그 질문에 대해 자세히 설명합니다.

유닉스에서 시작되었습니다

모든 프로그래밍과 마찬가지로 우리는 유닉스로 돌아가야 합니다. 셸 역사:1971년 Ken Thompson은 최초의 Unix 셸인 Thompson 셸을 출시했습니다. 그러나 사용자가 할 수 있는 스크립팅의 양에는 심각한 제한이 있었습니다. 이는 자동화 및 결과적으로 전체 IT 운영 분야에 심각한 제한을 의미했습니다.

이 환상적인 연구는 스크립팅 초기 시도의 어려움을 간략하게 설명합니다(명령 강조 표시를 위해 굵게 추가됨).

<블록 인용>

Multics의 이전 버전과 유사하게 이 셸(/bin/sh )은 커널 외부에서 실행되는 독립적인 사용자 프로그램이었습니다. globbing과 같은 개념(*.txt과 같은 매개변수 확장을 위한 패턴 일치) )는 glob이라는 별도의 유틸리티에서 구현되었습니다. , 만약 조건식을 평가하는 명령입니다. 이 분리는 C 소스의 900줄 미만으로 쉘을 작게 유지했습니다.

쉘은 리디렉션을 위한 간결한 구문을 도입했습니다(<>>> ) 및 배관(| 또는 ^ ) 현대 쉘로 살아남았습니다. 또한 순차 명령 호출에 대한 지원을 찾을 수 있습니다( ; ) 및 비동기 명령(& 포함) ).

Thompson 셸에 부족한 것은 스크립트 기능이었습니다. 유일한 목적은 명령을 호출하고 결과를 보기 위한 대화형 쉘(명령 인터프리터)이었습니다.

터미널에 대한 액세스가 증가함에 따라 자동화에 대한 관심도 함께 커졌습니다.

Bourne 쉘은 한 걸음 더 나아갔습니다.

Thompson이 출시된 지 6년 후인 1977년에 Stephen Bourne은 Thompson 셸의 스크립팅 제한을 해결하기 위한 Bourne 셸을 출시했습니다. (1990년부터 Bash 언어의 주요 유지 관리자인 Chet Ramey는 Command-Line Heroes의 이번 에피소드에서 이에 대해 설명합니다.) 그것은 Unix 시스템의 일부로 Bell Labs에서 나온 기술의 자연스러운 진화였습니다.

Bourne은 무엇을 다르게 하려고 했습니까? M. Jones 연구원은 이에 대해 다음과 같이 잘 설명합니다. 

<블록 인용>

Bourne 셸에는 두 가지 주요 목표가 있었습니다. 즉, 운영 체제 및 스크립팅(셸을 통해 호출할 수 있는 재사용 가능한 스크립트 작성)에 대한 명령을 대화식으로 실행하는 명령 해석기 역할을 했습니다. Thompson 쉘을 대체하는 것 외에도 Bourne 쉘은 이전 제품에 비해 몇 가지 장점을 제공했습니다. Bourne은 제어 흐름, 루프 및 변수를 스크립트에 도입하여 운영 체제(대화식 및 비대화식 모두)와 상호 작용할 수 있는 보다 기능적인 언어를 제공했습니다. 셸은 또한 셸 스크립트를 필터로 사용할 수 있도록 하여 신호 처리에 대한 통합 지원을 제공하지만 기능을 정의하는 기능은 부족했습니다. 마지막으로 스크립트에 보존된 문자열 리터럴을 포함하기 위한 명령 대체(역따옴표 사용) 및 HERE 문서를 포함하여 오늘날 우리가 사용하는 여러 기능을 통합했습니다.

Bourne은 이전 인터뷰에서 다음과 같이 설명했습니다.

<블록 인용>

원래 쉘은 실제로 언어가 아니었습니다. 파일에서 명령의 선형 시퀀스를 실행하는 방법인 녹음이었습니다. 유일한 제어 흐름 기본 요소는 레이블로 이동하는 것이었습니다. Ken Thompson이 작성한 원래 쉘에 대한 이러한 제한은 중요했습니다. 예를 들어 명령 파일 자체가 표준 입력이기 때문에 명령 스크립트를 필터로 쉽게 사용할 수 없었습니다. 그리고 필터에서 표준 입력은 명령 파일이 아니라 상위 프로세스에서 상속한 것입니다.

원래 셸은 간단했지만 사람들이 응용 프로그램 개발 및 스크립팅에 Unix를 사용하기 시작하면서 너무 제한적이었습니다. 변수도 없고 제어 흐름도 없고 인용 기능도 매우 부적절했습니다.

이 새로운 셸은 스크립터에게 큰 진전이었지만 액세스 권한이 있는 경우에만 가능했습니다.

Bourne의 셸을 자유 소프트웨어로 다시 생각하기

그때까지 지배적인 셸은 Bell Labs에서 소유 및 운영하는 독점 소프트웨어였습니다. 운이 좋다면 대학에서 Unix 셸에 액세스할 수 있습니다. 그러나 그 제한된 접근은 자유 소프트웨어 재단(FSF)이 달성하고자 하는 세계와는 거리가 멀었습니다.

Richard Stallman과 같은 생각을 가진 개발자 그룹은 GNU 라이선스에 따라 무료로 사용할 수 있는 라이선스로 Unix의 모든 기능을 작성하고 있었습니다. 그 개발자 중 한 명이 쉘을 만드는 임무를 받았습니다. 그 개발자는 브라이언 폭스였습니다. 그리고 그가 자신의 작업에 대해 말하는 방식이 저를 완전히 매료시켰습니다. 그가 팟캐스트에서 말했듯이:

<블록 인용>

이 작업이 어려운 이유는 Bourne 셸의 모든 동작을 충실하게 모방하는 동시에 사람들이 더 나은 도구로 사용할 수 있도록 확장해야 했기 때문입니다.

이것은 또한 사람들이 셸 표준이 무엇을 의미하는지 논의하던 때였습니다. 이 역사를 배경으로 경쟁을 전면에 내세워 인기 있는 Bourne 쉘을 재창조했습니다. 다시 태어났습니다.

쉘, 본 어게인

자유 소프트웨어 임무와 경쟁이라는 이 두 가지 촉매는 Bourne-Again shell(Bash)에 생명을 불어넣었습니다. 당시로서는 이례적인 움직임으로 Fox는 자신의 이름을 따서 쉘 이름을 짓지 않았으며 Unix에서 자유 소프트웨어로의 진화에 집중했습니다. (Fox Shell은 Fish shell을 fsh 명령 #missedopportunity로 이길 수 있었지만). 그 이름 선택은 그의 성격과 일치하는 것 같습니다. Fox가 에피소드에서 말했듯이 그는 개인적인 영광에 대한 인식조차 관심이 없었습니다. 그는 프로그래밍 문화가 발전하도록 도우려고 노력했습니다. 그러나 그는 좋은 말장난을 넘어선 사람이 아니었습니다.

Bourne이 말장난으로 인해 무시당하는 느낌을 받지 않았다는 소식을 들으니 좋았습니다. Bourne은 회의에서 누군가가 그에게 걸어와 Bash 티셔츠를 줬을 때의 이야기를 들려줍니다. 그 사람은 브라이언 폭스였습니다.

출시 크리에이터
톰슨 쉘 1971년 켄 톰슨
본 쉘 1977년 스티븐 본
본 어게인 쉘 1989년 브라이언 폭스

시간이 지남에 따라 Bash의 채택이 증가했습니다. 다른 엔지니어들이 이를 사용하고 설계 개선 사항을 제출하기 시작했습니다. 실제로 몇 년 후 Fox는 Bash에 대한 통제권을 포기하는 법을 배우는 것이 그의 인생에서 가장 중요한 일 중 하나라고 주장했습니다. Unix가 Linux와 오픈 소스 소프트웨어 운동에 자리를 내줌에 따라 Bash는 오픈 소스 세계의 핵심 스크립팅 세력이 되었습니다. 훌륭한 프로젝트는 한 사람의 비전 범위를 넘어 성장하는 것 같습니다.

쉘에서 무엇을 배울 수 있습니까?

쉘은 일상적인 노트북 사용에 있어 필수적인 기술이므로 발명이 필요하다는 사실을 잊어버리기 쉽습니다. Thompson에서 Bourne, Bash 쉘로 이동하는 이야기는 몇 가지 친숙한 내용을 끌어냅니다.

  • 의욕이 있는 개인은 올바른 사명을 염두에 두고 큰 발전을 이룰 수 있습니다.
  • 오늘날 우리가 의존하고 있는 것의 대부분은 우리 업계에서 아직 살아 있는 전설의 작품에 기반을 두고 있습니다.
  • 살아남는 경향이 있는 소프트웨어는 원래 제작자의 비전 이상으로 진화하는 소프트웨어입니다.

Command Line Heroes는 시즌 3의 모든 프로그래밍 언어를 다루었으며 이제 막바지에 다다랐습니다. 프로그래밍 언어의 기원에 대해 알고 싶은 모든 것을 구독하려면 구독하십시오. 아래 댓글에서 쉘 이야기를 듣고 싶습니다.