PowerShell 스크립트용 shebang을 사용하는 것이 가장 좋습니까?

PowerShell 스크립트용 shebang을 사용하는 것이 가장 좋습니까?

쉘 스크립트에는셰르본이와 같이:

#!/bin/bash
echo "The shebang above this line works like a typical a comment but with a purpose"

PowerShell 스크립트는 셸 스크립트이기도 합니다. 따라서 다음과 같이 해도 괜찮습니다.

#!/usr/local/bin/pwsh
echo "The shebang above this line works like a typical a comment but with a purpose"

이 스크립트는 Windows 컴퓨터에서는 의미가 없는 것 같지만 Linux 및 Mac 컴퓨터에서는 의미가 있는 것 같습니다.

PowerShell 스크립트용 shebang을 사용하는 것이 더 낫다고 생각하시나요?

답변1

UNIX/Linux 파생 시스템에서 실행 가능한 스크립트를 실행할 때 커널(때때로 셸)은 #!사용할 인터프리터의 이름을 나타내는 (shebang) 플래그를 첫 번째 줄에서 찾습니다.

shebang이 없으면 스크립트를 실행하는 방법에 대한 명시적인 정보가 없으며 인터프리터는 사용자가 명시적으로 지정합니다.

예를 들어,

bash somescript         # user calls bash explicitly to run the script

그리고

chmod a+x somescript    # make executable
head -n1 somescript     # show the first line
#!/bin/bash

./somescript            # the script itself defines bash to execute it

표준 쉘뿐만 아니라 모든 인터프리터에도 동일하게 적용됩니다. 따라서 #!/bin/awk, #!/usr/bin/perl등을 가질 수 있습니다 .

#!/usr/local/bin/pwsh마찬가지로, 읽은 코드를 실행할 수 있는 인터프리터를 제공 하지 못할 이유가 없습니다.표준 입력. 이것이 내가 하고 싶은 일이다.

답변2

PowerShell 스크립트는 주로 Windows에서 실행되며, 직접 실행되는 .exe, , .com를 제외한 모든 파일의 파일 확장자 에 주의를 기울입니다 . Windows에는 또한 Unix 운영 체제에서 소위 "실행 가능" 비트라고 불리는 실행 파일에 대한 개념이 없습니다..cmd.bat

반면에 Linux는 실행 파일로 표시된 파일에 대해 shebang을 사용하여 사용할 인터프리터를 찾기 때문에 shebang이 매우 중요합니다.

PowerShell 스크립트용 shebang을 사용하는 것이 더 낫다고 생각하시나요?

Windows 시스템의 경우에는 의미가 없지만 Linux 시스템의 경우에는 완벽하게 의미가 있습니다. 궁극적으로 그것은 당신에게 달려 있습니다. PS shebang을 추가하면 모든 스크립트에 추가할 수 있으므로 나쁠 것은 없습니다. 단지 Linux에서 PS를 사용하는 사람들을 알지 못한다는 것입니다.

답변3

일반적으로 말해서, 모든 x-nix에서 #!/usr/bin/env항상 env 위치로 시작하기를 원합니다 . 와 /usr/bin/달리 운영 체제에 따라 둘 중 하나이거나 둘 다일 수도 있습니다 . 경로를 검색하여 올바른 실행 파일을 찾고 스크립트의 이식성을 높입니다.envbash/usr/bin/bin/usr/bin/env

#!/usr/bin/env pwsh

루트는 일반적으로 경로에 포함되지 pwsh않으므로 루트가 아닌 경우 경로에서 찾을 수 있습니다./usr/local/bin

예외는 여러 환경(예: Python virtualenv)이 있는 프로그램을 처리할 때이며, 여기서 shebang은 Python의 특정 환경을 호출하는 데 사용됩니다. 그러나 virutalenv는 이식성이 없으므로 여기서 이식성을 희생하는 것은 일관됩니다.

관련 정보