그래서 리눅스에는 다양한 종류의 쉘이 있습니다.
Linux의 다양한 유형의 쉘
Bourne 셸(sh) ...
GNU Bourne-Again 셸(bash) ...
C 셸(csh) ...
Korn 셸(ksh) ...
Z 셸(zsh)
Shebang부터 시작하여 Bourne 쉘용 스크립트를 작성해야 하는 프로젝트가 있습니다.#!/bin/sh
.
하지만 Google을 사용하여 세부정보를 찾을 때마다 항상 수많은 결과를 얻습니다.bash
, 나는 함께 사용할 수 있다고 생각합니다sh
하지만 항상 그런 것은 아닙니다...
그래서 저는 Google에게 "아니요! 그냥 Bourne 쉘 원본을 제공하세요!"라고 말하고 싶었습니다. 하지만 사람들은 대부분의 웹페이지에 "Bourne shell"이라는 문자열을 입력하지 않으므로 Google은 이 문제를 직접 해결하는 데 도움을 줄 수 없습니다.
다음에 추가"sh"
.sh
파일 확장자와 일치하는 내 검색어에는 별로 도움이 되지 않았는데 bash
!
다음에 추가"#!/bin/sh"
내 검색어는일부도움 - 하지만 스크립트의 결과만 볼 수 있으며 때로는 간단한 답변이 터미널 명령으로 표시됩니다(그런 다음 스크립트에서 사용하도록 조정할 수 있음).
"완벽한" 해결책은 없다는 것을 알고 있지만 "팁과 요령"의 정신으로 내가 원하는 결과로 결과를 좁힐 수 있는 영리한 방법을 제안해 주실 수 있나요?
아니면 몇 가지 권위 있는 Bourne Shell 문서 소스를 사용하는 것이 유일한 해결책입니까? 그렇다면 어느 것입니까?
답변1
실제로 여러분은 역사적인 Bourne 쉘(대부분의 현재 UNIX 시스템에서는 일반적이지 않음)에 관심이 있을 것입니다.현재 POSIX 사양sh
껍질을 위해 .
- 이 유틸리티에 대한 POSIX 표준은
sh
유틸리티를 설명하는 섹션에서 찾을 수 있습니다.sh - 쉘, 표준 명령 언어 해석기, 그리고 - POSIX 쉘의 구문, 구문 등은 Chapter 에 설명되어 있습니다.쉘 명령 언어.
또한보십시오:
현재 승인된 답변U&L에 관한 질문"sh 호환"이란 무엇을 의미합니까?Unix 쉘의 역사와 "계보"를 자세히 설명합니다.
사용 중인 시스템의 명령은
man sh
해당 시스템의 쉘에 대한 매뉴얼을 표시합니다.sh
이는 POSIX 구문과 구문을 구현하는 셸이 될 것입니다. 아마도 셸 방식을 변경하여 가능합니다.대개자체 이름으로 호출되면 동작을 나타냅니다(예: 호출되면bash
및 작업이 수행됩니다).zsh
sh
답변2
내 경험에 따르면 셸을 사용하여 특정 작업을 수행하는 방법에 대한 도움말을 찾고 있는 경우 #!/bin/sh
Google 쿼리 앞에 다음 중 하나를 추가할 수 있습니다.
POSIX- POSIX 호환 셸에서 특정 기능을 구현하는 방법 또는 Bash와 같은 셸에서 POSIX 호환 방식으로 POSIX에서 필요하지 않은 추가 기능을 구현하는 방법에 대해 논의하게 됩니다. (보통 당신은 https://unix.stackexchange.com)
스프린트- 대시는 가장 널리 사용되는 데스크탑 Linux 배포판인 /bin/sh Ubuntu입니다. /bin/sh를 사용하여 명령을 실행하는 cron 및 기타 도구에서 사용되므로 많은 질문과 답변이 이루어졌습니다.
바쁜 상자- busybox에는 Bash나 ZSH만큼 크지 않은 자체 쉘이 함께 제공되므로, busybox 쉘에서 작동하는 것이 있다면 로컬 미니멀리스트 /bin/sh에서도 작동해야 합니다.
답변3
내가 말하고 싶은 것은 이 문제를 해결하는 가장 좋은 방법입니다.
상식
이것이 명백하거나 무례하게 들릴 수도 있지만 "상식은 무엇입니까?"라고 질문할 수 있습니다.
bash
sh
때때로 일부 배포판에는 심볼릭 링크가 있습니다sh
때때로ash
(Busybox) 심볼릭 링크bash
스크립트는 일반적으로 아래에서 잘 작동하고(일부 구문 제외)sh
그 반대도 마찬가지입니다(ash
- 와 동일sh
).- 시도 해봐. (말 그대로, 어떤 조각을 사용하거나 더 많은 경험이 없으면 어떤 조각에 버그가 있는지 여부가 명확하지 않을 수 있기 때문입니다
shellcheck
) - 다양한 키워드 조합을 시도해 보세요. (이것은 당연하지만 이 게시물을 더 길게 만들지 않고서는 자세히 설명하기가 어렵습니다.)
- 다른 검색 엔진을 사용해 보십시오(대부분 유사한 결과가 나오지만 항상 그런 것은 아닙니다).정밀한동일한 결과, 동일한 키워드)
위의 내용을 다른 쉘에도 적용할 수 있습니다. try
찾은 스니펫/코드를 사용하는 데 주저하지 마세요 (이 작업을 수행할 때 디버깅하고 유용한 도움말을 제공하는 데 사용했거나 발견했습니다) -x
.set -x
shellcheck
물론 질문이 있거나 문제를 발견했을 때 각 셸에 대한 설명서를 사용하는 것이 좋습니다.
추가 리소스:
- http://mywiki.wooledge.org/BashFAQ
- https://github.com/dylanaraps/pure-bash-bible
- https://github.com/dylanaraps/pure-sh-bible
- https://www.gnu.org/software/
- https://wiki.bash-hackers.org/
노력하는 것은 학습의 일부입니다. 행운을 빌어요!
답변4
일반적인 Linux 배포판 중 대부분(예: CentOS 및 Arch)은 Bash를 사용한다고 생각합니다 /bin/sh
. 주요 예외는 Dash를 사용하는 Debian 및 Ubuntu(및 그 파생 버전)입니다. Ubuntu에는 가장 일반적인 "Bashism"을 식별하는 유용한 위키 페이지도 있습니다.https://wiki.ubuntu.com/DashAsBinSh
참고하시기 바랍니다,원래Bourne 쉘은 Dash처럼 구현된 POSIX 쉘과 약간 다릅니다. 명시적으로 검색하지 않으면 Linux 시스템에서 찾을 수 없습니다.가보 껍질.