스크립트를 실행하는 데 사용되는 쉘을 어떻게 출력합니까?
예: $SHELL 변수는 특정 사용자에게 기본 셸을 제공합니다. 괜찮습니다. 하지만 특정 사용자는 다른 셸을 사용하여 스크립트를 시작할 수 있습니다(예: "sh script.sh" 또는 "csh script.sh").
Linux 머신을 사용하세요.
답변1
Linux를 지정했으므로 이는 작동합니다 readlink -f /proc/$$/exe
. 이는 표준 출력에서 쉘 스크립트(예: /bin/bash
)를 실행하는 쉘에 대한 경로를 제공합니다. 따라서 이를 변수에 할당할 수 있습니다(적어도 POSIX 쉘에서는) var=$(readlink -f /proc/$$/exe)
.
$$
현재 쉘의 pid입니다. /proc/«pid»/exe
"마법의" 심볼릭 링크 형태로 특정 pid에서 실행 중인 실행 파일을 쿼리할 수 있는 커널 기능입니다. 따라서 readlink
를 사용하여 경로를 얻을 수 있습니다.
ps
Linux가 아닌 경우에는 eg를 사용할 수 있지만 ps -o args= $$
이로 인해 결국 스크립트 이름이 제공될 수 있습니다(POSIX에서는 두 가지 동작을 모두 허용합니다).
예를 들어 스크립트가 사용자의 셸에 변수를 설정하도록 설계되지 않은 경우 #!
맨 위 줄을 사용하여 스크립트를 실행할 셸을 지정해야 합니다.
답변2
독립형 스크립트는 실행 중인 인터프리터를 테스트해서는 안 됩니다. 이러한 자체 검사는 어색하고 오류가 발생하기 쉬우며 Unices마다 다르게 구현해야 할 수도 있습니다.
예를 들어, Perl 스크립트는 Perl 인터프리터에 의해 해석되고 있다고 항상 안전하게 가정할 수 있고, Python 스크립트는 항상 Python 인터프리터에 의해 실행될 수 있습니다. 그렇다면 스크립트가 bash
에 의해 실행되고 bash
있고 sh
스크립트가 에 의해 실행되고 있다고 가정하면 안되는 이유는 무엇입니까 /bin/sh
?
특정 테스트능력bash
현재 인터프리터의 문제는 배열 버전을 제공 $BASH_VERSION
하고 테스트하는 것과는 다릅니다 $BASH_VERSINFO
(예를 들어).
bash
그렇다면 실행할 스크립트 bash
와 csh
실행할 스크립트를 어떻게 얻습니까 csh
? 글쎄, 사용자가 통역사를 선택하는 것을 피할 수 있습니다.
당신은 이것을 할 수 있습니다
사용자 혼란을 방지하려면 스크립트 파일에 파일 이름 접미사를 추가하지 마십시오. 파일
bash
의 스크립트는myscript.sh
사용자가 그것이 사용 가능하다고 생각하게 만들 수 있습니다sh
. 대신 스크립트를 호출하면 됩니다myscript
.#!
("shebang" 또는 "hashbang") 줄을 사용하세요 .
-line은 #!
스크립트의 첫 번째 줄에 있으며(이 두 문자는 #!
파일의 첫 번째 문자여야 함) 사용할 인터프리터의 경로를 지정합니다.
스크립트 bash
에는 다음이 있을 수 있습니다.
#!/bin/bash
bash
이것이 시스템의 실행 파일에 대한 경로이거나 bash
시스템의 어느 위치에서든 가져오려는 경우,$PATH
#!/usr/bin/env bash
예를 들어 첫 번째 줄입니다.
이렇게 하면 관련되지 않은 다른 언어 해석기 에 의해 해석되거나 해석 bash
되지 않도록 항상 보장됩니다.sh
csh
python
다음 단계는
- 스크립트를 실행 가능하게 만드는 데 사용됩니다
chmod +x myscript
.
이제 스크립트를 실행할 수 있습니다
./myscript
이를 실행하는 데 어떤 통역사를 사용하는지 걱정하지 마십시오. 사실 스크립트 사용자에게는 중요하지 않습니다.별말씀을요bash
스크립트 든, Python 스크립트든, 컴파일된 바이너리든 상관없습니다 .