~에서Mark G. Sobell의 Linux 명령, 편집기 및 쉘 프로그래밍에 대한 실용 가이드
bash를 사용하여 쉘 스크립트를 실행할 수 있지만 이 기술을 사용하면 자신에게 실행 권한을 부여하고 스크립트를 직접 호출하는 것보다 스크립트가 더 느리게 실행됩니다.
왜 그런 겁니까?
- 실행 파일처럼 스크립트를 실행하는 것과 셸을 통해 명시적으로 실행하는 것의 차이점은 무엇입니까?
둘 다 아래의 동일한 단계를 따릅니다.
명령줄의 명령을 사용하면 셸이 새 프로세스를 분기하여 셸 프로세스의 복사본(하위 셸)을 생성합니다. 새 프로세스가 명령 실행을 시도합니다. 포크와 마찬가지로 exec 루틴은 운영 체제(시스템 호출)에 의해 실행됩니다. 명령이 쉘 스크립트이기 때문에 exec가 실패합니다. exec가 실패하면 명령은 쉘 스크립트로 간주되고 서브쉘은 스크립트의 명령을 실행합니다. 명령줄에서 입력이 필요한 로그인 쉘과 달리 하위 쉘은 파일(즉, 쉘 스크립트)에서 입력을 받습니다.
답변1
스크립트가 Bash 스크립트(예: 로 시작 #!/bin/bash
)라고 가정하면 작성자는 그 점에서 틀렸습니다. 쉘 스크립트를 직접 실행하면 커널은 #!/bin/bash
시작 부분에서 해당 행을 본 다음 스크립트의 파일 이름을 인수로 사용합니다 /bin/bash myscript.sh
. 즉, 커널은 명시적으로 쉘에 전달한 경우 수행할 작업을 정확하게 수행합니다.
이제 스크립트가 #!/bin/sh
대신으로 시작 하면 #!/bin/bash
또 다른 가능성이 있습니다. Bash를 제공할 수 있지만 /bin/sh
필수는 아닙니다. 또한 크기나 속도보다 기능을 우선시합니다. 더 작고 빠른 쉘을 사용하는 경우 /bin/sh
스크립트를 직접 실행하면 더 빠른 쉘이 사용되며 스크립트는 Bash에서보다 빠르게 실행됩니다.
이는 Debian 기반 배포판(예: Debian, Ubuntu, Mint)에서 실제로 발생합니다. 그들은 부팅 스크립트를 더 빠르게 실행하기 위해 Bash 대신 dash
Provider라는 셸을 사용하는 경향이 있습니다 ./bin/sh
배포판의 기능을 확인하려면 ls -l /bin/sh
심볼릭 링크 /bin/bash
나 /bin/dash
다른 셸일 수 있습니다.