쉘 스크립팅에서 #! / bin / bash는 무엇입니까? / bin / sh와 / bin / bash의 차이점은 무엇입니까? 때때로 쉘 스크립트가 줄없이 작동하는 이유는 무엇입니까?


최상 답변

#!/bin/bash

이것은 shebang으로 알려져 있으며, 인터프리터에게 다음 줄이 bash에 대해 작성되었음을 알려줍니다. 따라서이 파일을 bash 스크립트로 실행하십시오.

#Example: Scripts are usually executed like below:

./scriptName

그래서 shebang은 스크립트 해석 방법을 결정합니다. 때로는 다음과 같을 수 있습니다.

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

그러므로이 줄은 스크립트가 해석되고 실행됩니다. 이제 왜 /bin/sh?

구성된 셸 중 하나를 가리키며, 때로는 sh

, 때때로 cshell, dash,zsh ,ksh 등과 같은 다른 셸

예 :

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

따라서 스크립트에서 #!/bin/sh를 사용하는 경우 스크립트의 동작은 는 시스템을 가리 킵니다. 다음과 같은 스크립트를 실행하여 shebang을 재정의 할 수 있습니다.

bash scriptName

#or

sh scriptName

위의 두 경우 shebang은 실행에 영향을주지 않으며 및 sh (쉘이 가리킴).

답변

음, 작동 방식은 정확히 세부 사항이 많으므로 여기서는 매우 정확하지 않을 것입니다. 모든 프로그램은 특정 전용 메모리 섹션에 코드를 넣은 다음 해당 인 메모리 코드 이미지의 진입 점을 호출하여 실행됩니다. 그 후에 프로그램이 실행됩니다.

코드 이미지를 메모리에 저장하는 작업은 운영 체제에서 수행하며 시작또는 프로그램 실행이라고합니다. OS는 자체적으로 한 번만 수행합니다. init 프로세스를 시작할 때 부팅시. init 프로세스와 그 하위 항목은 exec 를 호출하여 OS에 다른 프로세스를 시작하도록 요청합니다. OS 시스템 호출.

쉘은 한꺼번에 특별하고 평범합니다. 다른 프로그램과 마찬가지로 실행되는 또 다른 프로그램입니다. 특별한 초능력이나 특별한 속성이 없습니다. 주로 사용자가 지정한 다른 프로그램을 시작하기 위해 사용자가 OS의 서비스에 액세스 할 수 있도록하는 목적이 있습니다. 사용자가 파일 시스템에 액세스하고 일부 표준 데이터 통신 스트림이 사용되는 방식을 지정하는 사용자 액세스 방법을 제공합니다 ( stdin , stdout stderr ).

셸은 다음 작업에 사용할 수있는 프로그래밍 언어를 제공합니다. 효율성을 위해 자동화 된 방식으로 일을 수행하고 의사 결정 및 반복을 수행하여 사용자 상호 작용없이 작업 할 수 있습니다. 사용자가 프로그래밍 언어 및 명령 줄 처리를 호출하기 위해 배우고 사용해야하는 특수 구문 및 표기법을 제공하고 사용합니다. 쉘 명령의 처리는 대화 형 터미널 또는 스크립트를 포함하는 텍스트 파일에서 올 수 있습니다.

쉘이 실행하는 프로그램을 쉘의 하위 프로세스라고합니다. 모든 프로세스는 다른 프로세스를 시작할 수 있으므로 셸은 그런 의미에서 특별하지 않습니다. 셸은 사용자가 자식 프로세스를 시작하는 방법을 지정할 수 있도록 최적화되어 있습니다. 다음 명령을 사용하여 Linux 호스트에있는 모든 프로세스의 계층 구조를 볼 수 있습니다.

ps -e lf

목록에서 찾을 수 있습니다. ps 프로세스 자체이며이를 실행하는 데 사용한 셸 프로세스의 하위 프로세스로 표시됩니다.

여기 훨씬 더 자세한 내용입니다. Quora 답변에서 다루기에는 너무 많습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다