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


18

내가 작성한 대부분의 코드는 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 및 기타 유틸리티도 포함됩니까?

4
나는이 질문을 upvoted하고 대답했지만, 그것에 대해 생각할수록 마지막 두 질문 만 사이트에 적합합니다. 다른 사람들은 "주로 의견 기반"입니다.
jordanm

1
이 질문에는 메타 측면도 있습니다. 질문에 대한 초기 답변에는 도움이되지 않지만 "이것은 이식성이 없습니다"와 같은 의견은 몇 개월 또는 몇 년 후에 질문 / 답변에 걸려 넘어지는 다른 독자들에게 매우 도움이 될 수 있습니다.
Bananguin

2
@Bananguin 댓글 "이것은 휴대용이 아닙니다"라고 말하지 마십시오. 그건 그냥 참고입니다. 나는 그런 유형의 의견을 스스로 만들었습니다. 그것은 "당신은 사용해서는 안됩니다 ..."입니다 나를 귀찮게합니다. 대답에 문제가 있음을 의미합니다. 예를 들어 답변에서 더 이상 사용되지 않는 코드를 권장하는 경우 유효합니다. Bash의 문제점이 궁금합니다.
toxalot

2
+1. 특히 질문에 bash태그 만있는 경우 누군가 "부 시즘이며 이식성이 없다"고 말합니다. 태그가 지정된 질문에 대답 할 때 C이식 가능한지 여부는 상관하지 Java않습니다.
PP

4
bashGNU 특정 확장 프로그램이 일부 유틸리티에 사용되고 있음을 지적하는 것처럼 (특정 질문이지만 Linux로 태그가 지정되어 있음), 특정 기능이며 이식성이 아니라는 점을 항상 지적하는 것이 좋습니다 . 나는 "이것이 bashism이고 당신은 그것을 사용해서는 안된다"고 말하는 것을 본 적이 없다.
Martin Tournoij

답변:


15

나는이 공동체의 일원으로서 사람들이 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에 처음 설치 될 가능성은 낮으므로 설치 될 도구에 의존 할 수 없습니다.


1
나는 사람들이 종종 bashisms을 무시 하는 것을 볼 수있는 것보다 여기에 더 있다고 생각합니다 . 나는 종종 나를 실망시키고이 질문을하도록 촉구하기에 충분하다는 것을 알았습니다.
toxalot

1
따라서 GNU 유틸리티가 PATH에 처음 설치되지 않은 경우이를 구체적으로 호출하는 방법이 있습니까? 그렇지 않으면 왜 전혀 설치하지 않았습니까?
toxalot

@toxalot : 바이너리와 스크립트는 절대 경로를 사용하여 명시 적으로 호출됩니다.
Bananguin

1
@Bananguin 누군가 누군가 Bash와 GNU 유틸리티를 설치했다면 (PATH는 아님) 절대 경로를 사용하도록 편집하고 find내가 사용한 다른 GNU 관련 유틸리티를 스크립트로 편집하면 스크립트를 사용할 수 있습니까? 분명히, 그것은 설치 프로그램 스크립트에 대해 사용자 친화적이지 않을 것입니다. 그러나 다른 사람들이 원하는 경우 GitHub에 무언가를 가져다 놓을 생각입니다. 모든 시스템에 이식 가능하지는 않습니다 . 많은 시스템에서 쓸모 없기를 원하지 않습니다 .
toxalot

1
@ toxalot : 그렇습니다. FIND=/opt/gnu/dispicable/bin/find스크립트의 시작 부분에 무언가를 넣고 스크립트 ${FIND}대신에 사용 find하면 사람들에게 설치 경로를 지정하고 스크립트가 올바른 도구를 사용하도록 장소를 지정하십시오!
Bananguin

5

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

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

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

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


마크 스튜어트 :

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


3
매끄러운 "Bash-isms"가 마음에 들지만 문제 해결 툴킷에는 vi와 Korn 쉘만 있다고 가정합니다. 그리고 나는 대부분의 유닉스에서 작동하는 명령을 사용하려고합니다. 그렇게하면 Bash, Perl 또는 PHP가 있는지 또는 어디에 있는지 ps 명령의 작동 방식에 대해 걱정할 필요없이 아픈 시스템에서 심사를 수행 할 준비가되었습니다.
마크 스튜어트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.