나는 Linux 및 기타 UNIX 시스템(아마도 OSX)을 위한 작은 쉘 스크립트를 작성하고 싶습니다. 그리고 원칙적으로 플랫폼에 구애받지 않는 것이 어떨까요?
그래서 나는 #!/bin/sh
shebang을 사용하고 있고 내 스크립트의 일부는 문자열을 압축해야 하므로 이것이 문자열이나 스트림을 압축하기 위한 POSIX 기본 유틸리티인지 알아보기로 했습니다. 예상대로 둘 다 나열 tar
되지 않았습니다.gzip
https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html. 그러나 내가 기대하지 않았던 것은 나열된 콘텐츠가 compress
내 Debian 11 Bullseye 시스템에 설치되지 않았다는 것입니다!
그렇다면 소위 모든 POSIX 호환 시스템에서 사용할 수 있는 POSIX 명령에도 의존할 수 없다는 건가요? 내가 어딘가에서 실수를 했나요?
답변1
나는 많은 크로스 플랫폼 도구를 만들었고 실제로 관심을 가져야 할 두 가지 사항이 있습니다.
- 핵심 논리/언어는 posix와 호환되어야 하고, 잘 작동해야 하며, bashisms, zsh'isms 등을 피해야 합니다. POSIX 규정 준수가 중요하고 달성하기 쉬운 곳입니다. 이는 서브쉘 코드에서 특히 중요합니다.
- 핵심 POSIX sh 로직을 래퍼로 사용하여 작업을 수행하는 데 필요한 도구를 테스트하고 계측한 다음 사용합니다. 가능성이 가장 높은 위치에서 가능성이 가장 낮은 위치로. 나는 이론적인 "POSIX가 그렇게 말했기 때문에 거기에 있어야 한다" 코딩에 시간이나 노력을 쏟은 적이 없다고 생각합니다. 나는 항상 거기에 있는 것을 테스트하고 사용했습니다. 물론 몇 줄의 코드가 추가되지만 모든 것을 항상 처리하는 것이 목표라면 그렇게 할 수 있습니다.
"압축" 도구에 관해서는 이 스레드 이전에는 들어본 적도 없다고 솔직하게 말할 수 있습니다. 그리고 위의 댓글을 보면 현재 사용되는 도구만큼 좋지 않기 때문에 내가 이 도구를 갖게 된 이유가 당연합니다. 항상 설치되어 있나요? 아니면 쉽게 설치할 수 있나요?
복잡한 것을 발견하면 기본 수준에서 매우 간단하게 만들지 않는 한 논리가 어디에서나 작동할 가능성이 빠르게 떨어집니다. 확실히 하자면, 그렇습니다. 항상 작동하지만 일단 도구를 추가하면 그다지 많지는 않습니다. 예를 들어, 시스템의 "awk"가 기본 awk일 것이라고는 믿을 수 없으며 nawk이거나 awk에 연결된 gawk일 수도 있습니다.
도구를 테스트하지 않으면 슬퍼질 것이며 진정한 크로스 플랫폼/크로스 OS/크로스 배포판을 만드는 데 성공하지 못할 것입니다.
그럼에도 불구하고 여전히 제대로 작동하지 않는 시스템을 발견하게 되면 더 많은 테스트와 폴백을 추가하여 해당 상황이 작동하도록 도구를 업데이트해야 합니다. 이것이 바로 현재의 방식입니다. 이전에 본 적이 없는 새로운 상황에 대한 콘텐츠를 추가했을 뿐입니다.
GNU/Linux가 여러 수준에서 더 이상 거의 따르지 않는 표준(시스템? 아니오?, 좋아요, 다음으로 넘어가겠습니다)을 유지하려고 하지 않는 한 그렇게 어렵지는 않습니다. 그렇지 않은 것은 시간 낭비와 무의미한 좌절로 이어질 뿐입니다.
중요하지 않은 도구를 사용하려고 하면 이것이 더 어려워집니다. 이 시점에서는 어떤 OS에도 전혀 의존할 수 없고 모든 BSD가 자체적으로 수행하는 모든 변종을 테스트하고 처리해야 하기 때문입니다. 이렇게 하지 마십시오 패키지 배포를 사용하는 것을 자랑스럽게 여기십시오. 그러나 OS에는 자체 핵심 도구가 포함되어 있습니다. 즉, 도구가 모든 변형/OS에서 동일한 이름을 가지고 있더라도 플랫폼 전체에서 동일한 출력에 의존할 수 없습니다. 또는 작동합니다. 예를 들어 ps는 OpenBSD, FreeBSD, Linux, 심지어는 wrt 펌웨어에서 볼 수 있는 비지박스에서도 크게 다릅니다.
답변2
Linux는 아마도 (거의 100%) POSIX와 호환되지만 모든 배포자는 기본적으로 어떤 패키지가 설치될지 결정할 수 있습니다(그리고 설치 프로세스 중에도 마찬가지입니다). compress
패키지 관리자를 사용하여 아름다운 데비안 시스템에 설치해 보는 것은 어떨까요 ?
# sudo apt install ncompress
기본적으로 압축은 더 이상 최신 알고리즘에 비해 너무 심각하여 compress
아무도 더 이상 사용하지 않습니다. 배포자는 기본적으로 프로그램을 설치하지 않도록 선택할 수 있습니다.bzip2
xz
당신은 또한 볼 수 있습니다이번 발표데비안의 POSIX 준수에 대해.