Bash 스크립트를 작성하는 경우 POSIX에 관심을 가져야 하는 이유는 무엇입니까? [폐쇄]

Bash 스크립트를 작성하는 경우 POSIX에 관심을 가져야 하는 이유는 무엇입니까? [폐쇄]

이 문제에 대해 다시 열 수 있는 제안/수정 사항을 찾고 있습니다. 이러한 답변 중 상당수는 나에게 객관적인 것처럼 보였고 정확히 내가 찾던 유형의 답변이었습니다.


POSIX에 관한 4개의 기사를 읽었지만 답을 찾지 못했습니다. 이제 POSIX가 무엇인지 알았습니다., 나는 이미 표준이 무엇인지 알고 있지만 POSIX 표준이 오늘날에도 왜 여전히 관련이 있는지 잘 모르겠습니다. 내가 읽은 세 개의 기사 중 하나는리차드 스톨먼과의 인터뷰. 그 속에서 그는 말했다.

세스: POSIX 호환 자유 소프트웨어 프로젝트가 다른 Unix 계열 시스템으로 더 쉽게 이식될 수 있습니까?

유효한 값: 그렇게 생각했지만, 1980년대에 나는 더 이상 소프트웨어를 GNU 이외의 시스템으로 포팅하는 데 시간을 낭비하고 싶지 않다고 결정했습니다. ...

세스: POSIX가 소프트웨어 자유에 중요한가요?

유효한 값: 기본적으로는 별 차이가 없습니다. 그러나 표준화는 우리가 자유 소프트웨어를 향해 더 빨리 나아갈 수 있도록 도와줍니다.이는 1990년대 초반에 달성됐다....[강조 내 것]

그의 대답은 GNU 관점에 물들어 있었지만 "POSIX는 더 이상 관련이 없습니까?"라는 내 질문에 대답하는 것 같았습니다.

우선 제가 이 부분에 관심을 갖는 이유를 좀 더 구체적으로 설명하면 다음과 같습니다.이 답변에서, 프로세스 리디렉션을 사용하는 것이 좋습니다 <(command). 응답은 다음과 같습니다. "안타깝게도 프로세스 리디렉션은 POSIX 기능이 아니므로 모든 시스템이 이를 지원하는 것은 아닙니다."

스크립트가 #!/bin/bash.위키피디아에 따르면, bash는 "대부분의 Linux 배포판에서 기본 로그인 셸로 사용되었습니다."

하지만,이 기사는 말한다, "현재 Linux는 높은 비용으로 인해 두 개의 상용 Linux 배포판인 Inspur K-UX [12] 및 Huawei EulerOS [6]를 제외하고는 POSIX 인증을 받지 못했습니다. 대신 Linux는 대부분 POSIX 표준을 준수하는 것으로 간주됩니다. "

그래서 나는생각하다POSIX의 목표는 이식성이지만, 적어도 내 경험상 내 스크립트는 다음과 같습니다.bash에서 작동하고 POSIX를 무시하면 이식 가능합니다. 반대의 경우는 아닙니다.

제 질문을 다시 말씀드리자면,작성자는 POSIX 규정 준수에 집중하는 데 시간을 투자해야 합니까?

답변1

어쩌면 신경쓰지 않아도 될지도 몰라알다POSIX 기능뿐만 아니라 특정 셸만 사용하게 됩니다.

그러나 결국 다른 것을 사용해야 할 가능성이 여전히 있으며, 이 경우 비표준 기능에 대해 알아 두는 것이 도움이 될 수 있습니다. 아마도 당신은 평생 동안 Linux에서 일해왔지만 새로운 $DAYJOB을 사용하면 완전히 다른 시스템의 껍질로 들어가게 될 것입니다.

하지만 이것이 단지 Linux가 아닌 시스템이라는 뜻은 아닙니다. 임베디드/소형 시스템에는 Busybox만 있을 수 있으며 기본 ash쉘은 Bash보다 일반 POSIX sh에 더 가깝습니다. (Busybox에는 hush제가 잘 알지 못하는 또 다른 셸이 있습니다. 또한 이것이 Bash 클론인 것으로 의심됩니다. 어쨌든 소규모 시스템에서는 일반적으로 더 작은 셸을 원하며 이는 아마도 기능이 덜하다는 것을 의미할 가능성이 높습니다.) 또한 Debian(및 Ubuntu) 그들은 또한 매우 우려했습니다. Bash는 매우 느리고 systemd가 등장하기 전에 시스템 시작에 쉘 스크립트가 많이 사용되었기 때문에 기본값을 또 다른 Ash 기반 쉘인 Dash /bin/sh로 . (예를 들어LWN 관련 기사그리고대시우분투 위키에서. )

어떤 경우에는 기능이 동일하기 때문에 POSIX 작업을 수행하는 데 비용이 들지 않습니다. 내가 생각할 수 있는 것은 [ a = b ]대신 사용 [ a == b ]하거나 i=$((i + 1))대신 사용하는 것과 같은 간단한 것들뿐이라는 것을 인정합니다 ((i++)). 어쨌든 그러한 상황이 존재합니다. 별다른 혜택 없이 사용하는 ==것이 일반적인 것 같습니다 . ( [[ .. ]]vs. [ .. ]는 약간 다르지만 실제로는 차이가 있습니다.)

이는 지역 변수, 배열, 프로세스 대체, 문자열 대체 및 슬라이스 확장을 절대 사용해서는 안 된다는 의미는 아닙니다! 오히려 그런 것 같아요.매우필요할 때 유용합니다. 전 세계의 모든 쉘에서 작동하지 않는다는 것을 깨닫는 것이 도움이 됩니다. 또는 더 나쁜 것은 동일한 방식으로 작동하지 않는다는 것입니다.

unix.SE에 대한 답변을 고려하면 웹 사이트 제목이 "Unix & Linux"라고 되어 있고 unix.stackexchange.com대신 그렇게 불린다는 점에 유의해야 합니다 linux.stackexchange.com. 따라서 Linux가 아닌 시스템을 염두에 두는 것이 어느 정도 관련이 있습니다. 그리고 내 생각엔 많은 오랜 사용자들이 그만큼 현학적이라고 생각한다. ;)

POSIX 체인을 떠나 Bash에 의존하려는 경우 zsh 사용을 고려할 수도 있습니다. POSIX와의 호환성이 훨씬 떨어지기 때문에 실제로 여러 면에서 더 건전해집니다.

답변2

POSIX 이외의 기능을 사용하여 쉘 스크립트를 작성할 수 있는 옵션이 있는 경우 해당 언어로 스크립트를 작성할 수도 있습니다.밖의Bourne 쉘 언어 계열. 이 모든 언어는 대부분의 경우 쉘보다 더 나은 인체공학적 특성을 가지고 있습니다.많은더 나은 인체공학적 설계(내가 만난 유일한 예외는 Tcl과 csh입니다).

따라서 이식성이 필요하지 않은 경우 - 관련 디자인 제약 조건이 아닌 경우 /bin/sh사용할 수 있는 유일한 스크립트 해석기입니다.틀림없이Unix인 척하는 모든 것에 존재합니다.쉘 스크립트를 작성하지 마십시오. 대신 좀 더 인체공학적인 언어 중 하나를 사용하세요.

답변3

Bash 스크립트를 작성할 때 POSIX에 대해 생각해본 적이 없다는 점을 인정해야 합니다. Bash 코드를 작성할 때 이를 고려했거나 고려하지 않았더라면 좋았을 것입니다.

내 경험에 따르면 POSIX는 C나 C++(또는 기타 컴파일된 언어)로 이식 가능한 코드를 작성할 때 매우 유용합니다. Windows에서도 POSIX 호환 라이브러리를 찾을 수 있습니다. 아니면 20년 전에는 제거했을 수도 있지만 C++에서 Windows 기능과 함께 사용할 수 있는 무언가를 얻기 위해 절망적인 싸움을 벌였던 기억이 납니다. 하지만 POSIX 기능을 사용하기 시작했을 때 효과가 있었습니다.

Java, Python 또는 bash와 같은 해석된 언어의 경우 다양한 플랫폼으로 포팅되었으므로 Windows 경로 이름과 같은 기능을 제외하고 코드는 모든 플랫폼에서 실행되어야 합니다.

관련 정보