이식 가능한 스크립트를 작성하는 것이 언제 중요합니까? 프로그래머에게 PHP 4에서 사용할

내가 작성한 대부분의 코드는 PHP입니다. 최근에 쉘 스크립팅을 배우기 시작했습니다. 내가 접한 대부분의 리소스와 자습서는 Bash에만 해당됩니다. 일부는 bashism에 대해 경고하고 일부는 그렇지 않습니다. 나는 여기와 스택 오버플로를 많이 읽었습니다.

답변이 bashisms를 사용할 때마다 누군가는 필연적으로 다음과 같이 말합니다.

<bash bashism here>를 사용해서는 안됩니다. 휴대용이 아닙니다.

질문에 태그가 지정된 경우에도 발생합니다 bash. 나에게 그것은 PHP 프로그래머에게 PHP 4에서 사용할 수 없기 때문에 PHP 5의 새로운 코드를 사용해서는 안된다고 말하는 것과 같습니다. Windows에서.

PHP로 작성할 때 최소 요구 사항을 선택하고 앞으로 호환되는 코드를 작성합니다. 이전 버전과 호환 되도록 걱정하지 않습니다 .

내가 사용하는 경우 #!/bin/bash오두막으로, 내가 왜 bashisms를 사용하지 말아야? 일부 사람들은 단지 그것을 위해 bashisms (pun 의도) 을 강타하고 싶다는 인상을 받기 시작 했습니다.

사람들은 종종 bash가 많은 시스템에서 기본 쉘이기 때문에 사용 bash하고 shell상호 교환 가능합니다. 따라서 코드에 bashism을 사용한다고 경고하는 주석을 추가하는 것을 이해할 수는 있지만 bashism 을 사용 하는 것이 잘못되었다는 의미는 이해하지 못합니다 .

분명히 개인적으로 사용하기 위해 스크립트를 작성하는 경우 원하는 언어로 작성할 수 있습니다. 그러나 내가 작성한 코드 중 일부는 다른 사람들에게 유용 할 수 있다고 생각하고 싶습니다.

게시하기 전에 내 질문에 대한 답변을 검색했습니다. 이식성 을 테스트 하는 방법 대한 많은 정보를 찾았 지만 중요한 시점 에 대한 정보를 찾을 수 없었 습니다 .

그렇다면 이식 가능한 스크립트를 작성하는 것이 언제 중요합니까?

예를 들어

  • 어떤 유형의 스크립트가 가능한 이식성이어야합니까?
  • Bash가 설치되지 않은 시스템은 얼마나 흔합니까?
  • 시스템에 Bash가 설치되어 있다면 GNU 버전의 find 및 기타 유틸리티도 포함됩니까?


답변

나는이 공동체의 일원으로서 사람들이 bash를 목표로하는 것들에 대한 bashism을 무시하는 것을 종종 보지 못한다. 이식성에 관해 이야기 할 때 GNUism은 bashism보다 훨씬 나쁩니다. bashshebang에 사용 하는 한을 사용 하여 스크립트를 실행할 수 있습니다 bash. 그러나 명시 적으로 확인하지 않으면 버전을 보장 할 수 없습니다. Bash 버전 4는 연관 배열과 같은 유용한 기능을 제공했지만 Bash v3은 여전히 ​​OS X 및 RHEL 5에서 널리 사용됩니다.

어떤 유형의 스크립트가 가능한 이식성이어야합니까?

이것은 귀하의 요구와 개발자로서 지원하기로 선택한 것에 관한 것입니다. 모든 유형의 * NIX를 지원하는 응용 프로그램의 설치 스크립트를 작성하는 경우 이식성이 매우 중요합니다.

Bash가 설치되지 않은 시스템은 얼마나 흔합니까?

FreeBSD와 Solaris 10은 기본적으로 bash가 설치되어 있지 않은 시스템의 예입니다. 임베디드 시스템을 제외하고 대부분의 Linux 시스템에 포함됩니다.

시스템에 Bash가 설치되어 있으면 GNU 버전의 find 및 기타 유틸리티도 포함됩니까?

아니요, 이것은 이식성의 실제 문제입니다. 이식성이 중요한 경우 POSIX 표준으로 정의 된 쉘 명령 기능 만 사용해야합니다. GNU 유틸리티는 FreeBSD와 같은 비 GNU 시스템에 설치할 수 있지만 PATH에 처음 설치 될 가능성은 낮으므로 설치 될 도구에 의존 할 수 없습니다.


답변

그렇다면 이식 가능한 스크립트를 작성하는 것이 언제 중요합니까?

어떤 유형의 스크립트가 가능한 이식성이어야합니까?

작업 환경에서 사용하고 다른 기계에서 작업하거나 미래에 작업 할 수있는 경우 작업을 시작하기 전에 도구를 다시 작성하지 않아도됩니다.

예 : 휴지통 스크립트 / rm교체


마크 스튜어트 :

… 문제 해결 툴킷의 경우 vi 및 Korn 쉘만 있다고 가정합니다. 그리고 나는 대부분의 유닉스에서 작동하는 명령을 사용하려고합니다.


답변