"Shell"과 "Bash"의 차이점은 무엇이며이 용어의 의미는 무엇입니까?
내가 아는 한 차이는 없습니다. 그러나 "쉘"과 "배쉬"에 관한 많은 책을 보았습니다!
따라서 Mac OS X에서 터미널로 작업하고 bash 스크립트를 작성하려는 경우 어떤 종류의 책을 사용 해야하는지 궁금합니다.
"Shell"과 "Bash"의 차이점은 무엇이며이 용어의 의미는 무엇입니까?
내가 아는 한 차이는 없습니다. 그러나 "쉘"과 "배쉬"에 관한 많은 책을 보았습니다!
따라서 Mac OS X에서 터미널로 작업하고 bash 스크립트를 작성하려는 경우 어떤 종류의 책을 사용 해야하는지 궁금합니다.
답변:
" 쉘 "은 운영 체제에 대한 인터페이스를 제공하는 소프트웨어입니다. 예를 들어, explorer.exe 는 Windows의 기본 셸이며 ( 대안이 있지만 ) OS X Finder 는 거의 동일한 기능을 제공합니다. Linux / * nix에서 셸은 데스크탑 환경 ( Gnome 또는 KDE 등 )의 일부이거나 그 위에 배치 된 별도의 소프트웨어 구성 요소 (예 : Unity 또는 Cinnamon ) 일 수 있습니다.
위의 예는 마우스 커서를 사용하여 상호 작용할 수있는 그래픽 사용자 인터페이스 (GUI)를 제공하기 위해 창, 메뉴, 아이콘 및 기타 이러한 요소의 조합을 사용하는 모든 그래픽 쉘입니다. 그러나 Bash와 같은 소프트웨어 또는 스크립트 작성과 관련하여 "쉘"은 일반적으로 전체 텍스트 기반을 제외하고 그래픽 쉘과 거의 동일한 작업을 수행하는 명령 줄 인터프리터를 의미합니다.
배쉬는 명령 줄 셸의 특정 예이며, 대체로 디자인 된 많은 리눅스 배포판뿐만 아니라 OS X의 그것의 기본 인, 아마도 가장 잘 알려진 것들 중 하나입니다 Bourne 쉘 강타 스탠드 ( "Bourne again shell")의 경우 첫 번째 유닉스 쉘 중 하나입니다 .
Windows에서 명령 줄 셸의 예로는 cmd.exe (일명 명령 프롬프트) 및 PowerShell이 있습니다.
배쉬는 여러 껍질 중 하나입니다.
OSX 또는 Linux와 같은 Unix 또는 Unix 계열 시스템의 쉘은 운영 체제에 명령 행 인터페이스를 제공하여 명령을 입력하고 실행할 수있는 응용 프로그램입니다. 선택할 수있는 다양한 쉘이 있지만 모두 파일 이름 와일드 카드, 파이프, 여기 문서, 명령 대체, 변수 및 조건 테스트 및 반복을위한 제어 구조를 제공합니다.
원래 유닉스 셸은 Bell Labs의 Stephen Bourne이 작성한 Bourne 셸이었습니다 . 그런 다음 tcsh로 업데이트 된 이후 버클리의 Bill Joy가 작성한 C 쉘 이 나왔습니다 . 다른 쉘로는 David Labn이 Bell Labs에서 작성한 Korn 쉘 , ksh, GNU 프로젝트를 위해 Brian Fox가 sh를 무료로 대체 한 "Bourne again shell"인 bash가 있습니다.
오늘날 bash는 아마도 가장 인기있는 유닉스 셸이지만 많은 사람들 (포함)은 여전히 더 좋은 구문을 기반으로 C 셸을 선호합니다. 기본적으로 맛의 문제이므로 시작하는 데 도움이되는 Wikipedia 기사를 읽는 것이 좋습니다.
'쉘 (shell)'이라는 용어는 잘 알려져 있습니다. 문자 그대로 O / S 주변의 셸이므로 사용자가 컴퓨터와 상호 작용할 수 있습니다. 원래 생각했을 때 그래픽 사용자 인터페이스 (windows :()가없는 경우는 거의 없었습니다. 모든 것은 명령 행에서 이루어졌지만 명령 행조차도 살 곳이 필요했습니다. .
간단히 말해서, 명령 행이 유용하려면 호출 할 수있는 명령이 필요했습니다. 따라서 명령 줄에서 사용할 수 있도록 프로그램을 셸 내부에서 실행했습니다. 프로그램은 자체 패키지로 밀접하게 그룹화되어 있으며 함께 작동하도록 설계되었습니다. 여기에는 "ls"및 "grep", "ps", "sed"등과 같은 프로그램이 포함됩니다. ">"및 "<"와 같은 파일 리디렉션 명령 및 파이프 ( "|")도 포함됩니다. 더 중요한 것은 조건부 연산과 같은 프로그래밍 구문도 포함합니다 (예를 들어, for 루프, while 루프, 명령문을 실행할 때 반환되는 상태를 확인하는 방법 (예 : "ls"를 실행하는 경우 무언가 찾았습니까?)) 그런 식으로). 이것들은보다 복잡한 커맨드 라인 (쉘) 스크립트의 기초입니다.
누군가 'Bash Shell'이라는 용어를 사용하면 O / S 쉘에서 실행되는 'Bash'라는 명령 줄 인터프리터에 대해 이야기합니다. 'Bash Shell Interpreter'의 줄임말이라고 생각할 수 있습니다. Bourne과 같은 다른 통역사가 있습니다 (Bash는 '새롭고 개선 된 Bourne Shell이며 Bourne Again Shell의 줄임말입니다). C-Shell, K-Shell (복잡한 쉘 스크립트를 작성하는 많은 사람들이 선호) 및 기타 GNU 변형도 있습니다. 수년에 걸쳐 쉘없이 사용하는 특정 명령 행 인터프리터를 참조하는 것이 일반적이되었습니다. 하나는 다른 것 없이는 사용할 수 없기 때문입니다. 그러나 현실은 그들이 다르다는 것입니다.
이들이 실제 쉘이 아닌 명령 행 인터프리터로 올바르게 알려진 이유는 쉘에 있으며 프로그램에서 실행중인 것처럼 모든 명령을 해석하기 때문입니다. 그리고 쉘은 올바른 표준을 충족하는 한 어떤 인터프리터를 실행하든 상관하지 않습니다.
그리고 왜 그들이 통역사라고 불리는가는 실제로 통역사이기 때문입니다. 스크립트를 명시 적으로 실행하지 않는 경우에도 (그리고 스크립트는 실제로 작성하는 명령 텍스트 파일이므로 다시 입력하지 않고도 동일한 명령을 반복해서 실행할 수 있습니다). 예를 들어, 겸손한 'ls'명령을 사용하십시오. 실행하면 파일 목록이 반환됩니다. 그러나 그것이 실행되는 방법은 귀하의 질문에 더 중요합니다. 단순한 명령으로 보이는 것을 실행하더라도 실제로는 명령 줄 인터프리터의 컨텍스트 내에서 실행됩니다. 즉, 더 큰 프로그램의 일부인 문장처럼 실행됩니다. 마치 실제로 쉘 스크립트 파일에 있지 않고 쉘 스크립트 스크립트 파일에있는 것처럼 실행됩니다. 익명 쉘 스크립트 파일
커맨드 라인에서 실행하는 것은 공통점이 있습니다 ( 'ls'와 같은 단일 명령이든 명령과 반복자와 조건문으로 가득한 스크립트 파일이든 상관 없음). 모두 커맨드 라인 인터프리터에 의해 처리됩니다. Bash, C-Shell, K-Shell (AIX btw의 기본값)입니다.
무슨 뜻인지 보려면 'test'디렉토리를 만드십시오 :
mkdir test
그것을 입력하고 다음 명령을 실행하십시오
grep hello *
'이러한 파일이나 디렉토리 없음'과 같은 일종의 응답을 얻을 수 있습니다. 이제 명령을 입력하십시오
echo $?
($?라고 말하면 암호 컴퓨터에서 찾은 것을 말하십시오.) 숫자가 2를 반환한다는 것을 알 수 있습니다. 그것은 '그러한 파일이나 디렉토리가 없음'을 의미하는 grep의 리턴 코드입니다. 이제 다음을 실행하십시오.
echo hello > hello.txt
grep hello *
echo $?
초기 grep 명령에서 'hello.txt'파일이 반환되고 이제 'echo $?'가 표시됩니다. 실제로 무언가를 찾은 숫자 '0'을 반환합니다.
이러한 겉보기 명령이 하나라도 실행 되더라도 명령 줄 인터프리터는 더 큰 프로그램의 일부인 것처럼 작동하고 반환 값을 추적합니다. 따라서 grep 명령 끝에서 *를 잊어 버리면 반환되지 않습니다. 명령문이 불완전하다는 것을 알고 더 많은 입력을 기대합니다. 결국 명령 줄에서 작성하고 실행하는 것이 합법적 인 루프의 결과를 grep하도록 요청할 수 있습니다.
결론은 껍질이 껍질이고 통역사 (사용하는 이름, 'Bash', k-shell 등)가 다릅니다. 그러나 주어진 순간에 그들은 완전히 함께 묶여 있기 때문에 종종 상호 교환 가능하게 사용됩니다.
Shell은 텍스트 기반 사용자 인터페이스입니다.
Bash는 쉘 유형입니다.