zsh
스크립트를 실행하기에 충분할 만큼 설치되었다고 가정할 수 있습니까 ?
#!/usr/bin/env zsh
쉐본으로서?
아니면 너무 많은 시스템에서 스크립트를 실행할 수 없게 됩니까?
설명: 최종 사용자가 실행하고 싶어할 수 있는 프로그램/스크립트(예: Ubuntu, Debian, SUSE, Arch 등)에 관심이 있습니다.
답변1
휴대성을 위해서는 그렇지 않습니다. zsh
적어도 Cygwin을 통해 모든 Unix나 Unix 계열 또는 심지어 Windows에서 컴파일할 수 있고 대부분의 오픈 소스 Unix 계열 및 일부 상용 소스용으로 패키지되어 있지만 일반적으로 기본 설치에는 포함되지 않습니다 .
bash
다른 쪽 끝은 bash
대부분의 비임베디드 Linux 시스템과 같은 GNU 시스템(GNU 프로젝트의 셸과 같은)에 설치되며 때로는 Apple OS/X와 같은 GNU가 아닌 시스템에도 설치됩니다. 상업용 Unix 측면에서는 Korn 셸(AT&T의 변형, 더 많은 버전이 있음 ksh88
)이 표준 bash
이며 둘 다 zsh
선택 패키지에 있습니다. BSD에서 선호되는 대화형 셸은 일반적 으로 Almquist 셸을 tcsh
기반으로 하거나 선택적 패키지로 설치 해야 합니다 .sh
pdksh
bash
zsh
zsh
Apple OS/X에는 기본적으로 설치됩니다. 심지어 거기에 있었죠 /bin/sh
. SysRescCD, Grml, Gobolinux 등 일부 Linux 배포판에서 기본적으로 찾을 수 있지만 주요 배포판은 없다고 생각합니다.
와 마찬가지로 bash
설치된 버전에도 문제가 있을 뿐만 아니라 사용 가능한 기능에도 문제가 있습니다. 예를 들어, bash3
또는 가 있는 시스템은 드물지 않습니다 zsh3
. 또한 지금 작성하는 스크립트가 이전 버전과의 호환성을 유지하려고 노력 하더라도 zsh5
작동한다는 보장은 없습니다 .zsh6
bash
스크립트의 경우 내 의견은 POSIX 쉘 구문을 사용하는 것입니다. 왜냐하면 모든 Unices에는 이 구문을 해석할 수 있는 이름이 지정된 쉘 sh
(반드시 가 아닐 수도 있음 ) 이 적어도 있기 때문입니다 . /bin
그렇다면 휴대성에 대해 너무 걱정할 필요가 없습니다. 해당 구문이 귀하의 요구에 충분하지 않은 경우 아마도 쉘 이상의 것이 필요할 것입니다.
그러면 귀하의 옵션은 다음과 같습니다:
- Perl은 어디에나 있습니다(비록 이전 버전의 기능 세트로 제한하고 기본적으로 설치된 Perl 모듈에 대해 가정하지 않아도 됨)
- 종속성이 지정된 패키지마다 하나를 빌드하거나 지정하여 인터프리터와 해당 버전(python 2.6 이상, zsh 4 이상, bash 4.2 이상...)을 스크립트의 종속성으로 지정합니다. 스크립트와 함께 제공되거나 스크립트 상단에 주석으로 포함된 추가 정보 파일에서 또는 요청된 인터프리터의 가용성을 확인하고 다음과 같은 경우 명시적인 오류로 해결하는 스크립트 시작 부분에 Bourne 구문 몇 줄을 추가합니다. 그렇지 않을 때는 그렇지요이 스크립트에는 zsh 4.0 이상이 필요합니다..
- 스크립트와 함께 인터프리터를 제공한다는 것은(라이센스 문제 참고) 각 대상 운영 체제에 대한 패키지도 제공해야 함을 의미합니다. 일부 인터프리터는 스크립트와 해당 인터프리터를 단일 실행 파일로 패키징하는 방법을 제공하여 이를 더 쉽게 만듭니다.
- 컴파일된 언어로 작성하세요. 다시 말하지만, 대상 시스템당 하나의 패키지입니다.
답변2
당신은 할 수 없습니다. 사용이 보장되는 것은 /bin/sh
기본적으로 원래 Bourne 쉘입니다. 거의 모든 Linux 설치에는 bash가 있지만 *BSD 시스템에서는 거의 없습니다(BSD는 bash와 같은 GPL 코드에 대해 심각한 우려를 갖고 있습니다). Mac의 표준 쉘이 무엇인지는 모르지만 GPL에 대해서는 우려가 있습니다. 솔라리스의 경우에도 마찬가지입니다.
zsh는 Fedora의 기본 설치에 포함되지 않은 틈새 쉘입니다(그리고 이것이 주요 배포판의 기본 설치라고 생각하지 않습니다).
답변3
나는 그것이 정말로 무엇에 달려 있다고 생각한다.嘚어떤 추가 기능을 사용하고 있으며 어디에 있습니까? 다른 사용자와 시스템 간에 스크립트를 배포하려는 경우 다음을 사용하는 것이 좋습니다.세게 때리다심지어쉿.
또한 스크립트가 조직 전체에서 실행되도록 설계되었으며 규칙이 있는 경우嘚귀하의 머신(예: 동일한 기본 AMI)에서 귀하의 작업은 고급 파일 선택기 또는 기타 기능과 같은 확장 기능을 통해 상당한 이점을 얻을 수 있습니다.http://www.rayninfo.co.uk/tips/zshtips.html계속 가라고 말하고 싶습니다!
답변4
거의 보장할 수 있는 유일한 것은 /bin/sh
실제로 정적으로 링크된 쉘일 수도 있고 다른 쉘에 대한 링크일 수도 있다는 것입니다. 다른 쉘은 일반적으로 sh라는 것을 감지하고 호환 모드에서 실행됩니다.
알아채다거의첫 번째 문장에서.
내가 작업한 모든 UNIX 계열 시스템에는 이 기능이 있습니다. 그들 중 상당수는 bash도 설치되어 있습니다(그러나전부는 아니다안에. 예를 들어, 일부 BSD에는 bash가 기본적으로 설치되지 않습니다. 일부 Linux 배포판에는스프린트, Debian Almquist 쉘로 변경되었습니다.
귀하가 보장할 수 있는 것은 설치 지침입니다. zsh가 필요하다는 내용을 README 파일에 추가할 수 있습니다. 패키지를 빌드하는 경우 zsh를 종속성으로 표시할 수 있습니다. autoconf/automake 도구를 사용하여 확인할 수 있습니다. 설치 스크립트에서 zsh가 발견되었는지 확인할 수 있습니다(/bin/sh에서 시작하여 zsh를 찾으십시오. 발견되면 계속하십시오. 그렇지 않으면 오류가 표시됩니다. 예: "경고: ZSH가 설치되지 않았습니다. 설치 지침을 읽으십시오." !".)
내가 잊고 있는 옵션이 더 있을 것이라고 확신합니다. 그러나 핵심은 다음과 같습니다.
- 검사를 받기 전까지는 어떠한 보장도 할 수 없습니다.
- /bin/sh가 존재한다는 것이 거의 보장되며 이를 확인할 수 있습니다.