bash
나는 대부분의 시간 동안 그것을 사용해왔고 이제 막 다른 쉘을 가지고 놀기 시작했습니다. dash
버전 번호를 알아내기 시작했지만 일반적인 방법(예: -v
또는) 이 $version
작동하지 않았습니다. 이것이 GNU에 특화되어 있기 때문에 이것이 작동하지 않는다는 것을 이해할 수 있습니다 --version
. 나는 온라인으로 검색하여 패키지 관리 시스템의 도움을 받아 다음과 같은 답변을 찾았습니다.
대시의 버전 번호를 어떻게 알 수 있나요?(사용자는 CentOS를 사용하고 있으므로 Redhat 패키지 관리 시스템에 따라 답변이 달라집니다)
그리고
Ubuntu bin에서 대시 쉘 버전을 찾는 방법은 무엇입니까?(AskUbuntu 사이트에서 가져온 것이므로 답변은 고급 패키징 도구에 따라 다릅니다.)
dash
그렇다면 패키지 관리 시스템에 의존하지 않고 버전 번호를 찾을 수 있는 방법이 있습니까? 나는 항상 소프트웨어 버전을 쿼리하는 것이 가장 기본적인 기능 중 하나로 간주되어 왔기 때문에 쉬운 방법이 없다면 매우 놀랄 것입니다. 이것이 사실이라면 이 디자인의 철학이 무엇인지에 대한 설명을 듣고 싶습니다. dash
패키지 관리 시스템에 의지하지 않고 버전을 얻을 수 있는 간단한 방법이나 이것이 왜 받아들여질 수 없는 대답인지에 대한 설득력 있는 설명(역사적 관점도 괜찮을 것입니다)을 기꺼이 받아들입니다 .
답변1
저는 항상 소프트웨어 버전을 조회하는 것이 가장 기본적인 기능 중 하나라고 생각합니다.
그러나 실제로는 그렇지 않습니다. 이것은 좋은 생각이고 우리는 그것을 배워야 합니다.
몇 년 전에는 커널, 패키지 관리자, 패키지 저장소가 없었습니다. 우리는운영 체제. 저것버전이 있으며 암시적으로 운영 체제의 모든 구성 요소 프로그램은 운영 체제 버전과 연결됩니다. 이는 BSD와 PC-DOS 모두에 해당됩니다.
what
1980년대 초 AT&T 세계에서는 소스 제어 시스템을 통해 프로그램에 대한 아이디어를 제공 하고 버전 문자열을 바이너리에 포함시켰습니다. 한동안 사람들은 이를 사용하여 사물의 버전을 찾을 수 있었지만 일반적으로 전체 프로그램이 아닌 프로그램 내의 개별 소스 파일 버전이 있었습니다. (나는 이 메커니즘을 16비트 프로그램이 있는 DOS 및 OS/2용 모든 버전 1 명령줄 유틸리티에 넣었습니다 WHAT
.)
오늘날 일부 OpenBSD를 사용하면 여전히 가능합니다 ...
$ 뭐/빈/sh /bin/sh PD KSH v5.2.14 99/07/13.2 $…그리고 FreeBSD 바이너리…
% 무엇/bin/tcsh /bin/tcsh: 저작권 (c) 1991 캘리포니아 대학교 리전트. %...하지만 OpenBSD와 FreeBSD의 대부분의 다른 프로그램에서는 더 이상 그렇지 않으며, 확실히 FreeBSD의 Almquist 쉘에서는 그렇지 않습니다...
% 무엇/빈/sh /bin/sh: %...Debian Almquist 쉘도 사용하지 않습니다.
% 무엇/빈/대시 /빈/대시: %
1988년 Digital Research는 옵션에 대한 도움을 요청하기 위해 옵션을 선택할 수 있는 도구에 대한 아이디어를 세상에 소개했습니다 /?
. Microsoft는 1991년에 DR-DOS에서 MS-DOS 버전 5.0으로 복사했고 IBM은 1992년에 OS에 복사했습니다. /2. 입소문은 Fidonet과 당시 컴퓨터 잡지에 널리 퍼졌으며, 이는 매우 좋은 것으로 간주되었으며 --help
옵션으로 GNU 코딩 규칙에 포함되었습니다 --version
. 그러나 이는 유닉스 세계에서 GNU가 아닌 도구에서는 흔하지 않았고, Almquist 쉘이 작성된 1989년에도 확실히 흔하지 않았습니다. 왜냐하면 GNU 협약은 1990년대까지 존재하지 않았기 때문입니다.
이제 Bourne Again 쉘(1989년에 처음 출시됨)이 지원됩니다 --version
. 이는 MirBSD Korn 쉘(원래 Korn 쉘은 1983년에 처음 출시되었습니다. 기억하세요), TENEX C 쉘(1983) 및 Z 쉘( 1990), 둘 다 현재 지원됩니다 --version
. 그러나 이 메커니즘은 데비안 사람들이 만들고 있음에도 불구하고 아직 Almquist 셸에 추가되지 않았습니다.딘 알름퀴스트수십 년 후의 껍질.
셸 자체 내에서 많은 셸(여러 Korn 변형, Z 셸, Bourne Again 셸 및 TENEX C 셸 포함)에는 shellname_VERSION
셸 스크립트 내에서 액세스할 수 있는 또는 셸 변수가 있습니다. version
마찬가지로 Almquist 쉘은 그렇지 않습니다.
추가 읽기
- 마이크 밀러(2014-10-06).
DASH_VERSION
변수 제공을 고려하세요.. 데비안 버그 #764172. - https://unix.stackexchange.com/a/257764/5132
답변2
file
해결 방법 으로 사용됩니다 .
file $(which dash)
:
/usr/bin/dash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=812a16ad1517b3d714e7b3bdb5470b2c82eb25ff, for GNU/Linux 3.2.0, stripped