저는 Debian을 기반으로 나만의 Linux 배포판을 구축하는 중입니다. 대시를 완전히 없애고 물고기나 엘프 같은 껍데기로 교체할 수 있을지 궁금합니다. 몇 가지 변경이 필요하다는 것은 알지만, 가능한지와 어떤 절차를 밟아야 하는지 궁금합니다.
답변1
추가 셸을 설치하는 데 방해가 되는 것은 없지만 Debian과 같은 범용 Unix 계열 시스템에 대해 이야기하는 경우 시스템에 /bin/sh
POSIX sh
구문을 지원하는 셸이 있는지 확인해야 합니다. 예를 들어, 많은 프로그래밍 언어는 이 쉘을 사용하여 셔 system("some sh code")
뱅이 없는 스크립트(그리고 확실히 #! /bin/sh -
셔뱅이 있는 모든 스크립트)를 해석합니다.
dash
반드시 bash
, ksh88
², mksh
, , bosh
, posh
, 또는 zsh
3 일 필요는 없으며 sh
패턴이 충분할 수도 있습니다. fish
, elvish
, csh
, tcsh
, rc
, es
는 구문이 POSIX의 구문과 완전히 다르기 sh
때문에 sh
사용할 수 없는 쉘의 예입니다.
이 중에서 dash
가장 좋은 선택은 대부분의 다른 옵션보다 더 간결하고 빠르며 안전하며 POSIX sh 코드를 해석하기만 하면 됩니다. 또한 데비안과 대부분의 파생 제품에서 사용하는 셸이므로 sh
인터프리터로서 가장 큰 사용자 기반 중 하나를 보유하고 있습니다. 즉, 문제가 있는 경우 일반적으로 신속하게 찾아서 수정합니다.
적어도 데비안과 같은 시스템에서는 상황이 더 좋습니다. 일부 다른 GNU 기반 시스템에서는 일부 시스템 스크립트가 해당 셸의 일부 비표준 확장을 사용하기 때문에 (의 GNU 구현 ) /bin/sh
이어야 합니다 . 데비안은 소위 말하는 모든 것을 제거하기 위해 엄청난 노력을 기울였습니다.bash
sh
바시즘따라서 .bash
dash
/bin/sh
어쨌든 시스템 기능을 커널에 직접 구현하면 시스템이 쉘이나 명령, 심지어 파일 시스템 없이도 완벽하게 작동할 수 있습니다. 스크래치 자신만의 시스템을 가지고 있다면 이런 문제는 항상 확실할 것입니다.
엄밀히 말하면 Debian의 경우 쉘은 POSIX의 상위 집합인 Debian 정책을 준수해야 합니다. 지원되어야 하는 다른 것 중에는 함수 내에서 변수의 로컬 범위를 가져오는 키워드/내장 함수가 sh
있습니다 .local
² 이는 POSIX 사양의 기반이 되는 셸(그 하위 집합) sh
이지만 FLOSS로 출시된 적이 없으므로 GNU/Linux 버전을 찾는 데 어려움을 겪을 것입니다.
³ yash
또 다른 POSIX 호환 셸이지만 일반적으로 텍스트가 아닌 데이터를 처리할 수 없기 때문에 사용하지 않을 것입니다. busybox ash는 대부분 POSIX와 호환되지만, busybox가 구축된 방식에 따라 해당 시스템 명령 대신 busybox 애플릿을 호출할 수 있으며, 그 중 일부는 POSIX와 호환되지 않으므로 전체 POSIX 기능 세트가 필요한 스크립트가 중단될 수 있습니다. ksh93은 주로 POSIX와 호환되지만 local
Debian 정책 요구 사항을 지원하지 않습니다 . 당신은 또한 볼 수 있습니다지역 변수를 정의하기 위해 "local" 키워드를 지원하는 쉘 목록