私はDebianに基づいて独自のLinuxディストリビューションを構築しています。ダッシュを完全に取り除き、魚やエルフのような殻に置き換えることができるかどうか疑問に思います。いくつかの変更が必要であることはわかりますが、可能であるかどうか、どの手順を踏むべきか疑問に思います。
答え1
追加のシェルをインストールするのを妨げることはありませんが、DebianなどのユニバーサルUnixシリーズシステムについて話している場合は、システムに/bin/sh
POSIXsh
構文をサポートするシェルがあることを確認する必要があります。たとえば、多くのプログラミング言語はこのシェルを使用して、system("some sh code")
シャバンがないスクリプト(そして確かに#! /bin/sh -
シャバンがあるすべてのスクリプト)を解釈します。
dash
必ずしもbash
、ksh88
²、、、、、、または3である必要はなく、パターンが十分である場合もありますmksh
。、、、、、、、は構文がPOSIXの構文と完全に異なるため、使用できないシェルの例です。bosh
posh
zsh
sh
fish
elvish
csh
tcsh
rc
es
sh
sh
この中でdash
最良の選択は、他のほとんどのオプションよりも簡潔で、高速で安全で、POSIX shコードを解釈するだけです。また、Debianとほとんどの派生製品で使用されるシェルなので、sh
インタプリタとして最大のユーザーベースの1つを持っています。つまり、問題がある場合は通常、すばやく見つけて修正します。
少なくともDebianのようなシステムでは、状況はより良いです。他の一部のGNUベースのシステムでは、一部のシステムスクリプトはそのシェルのいくつかの非標準拡張を使用するため(GNUの実装)である必要が/bin/sh
あります。 Debian はいわゆるすべての言葉を取り除くために大きな努力をしました。bash
sh
バシズムしたがってbash
、dash
/bin/sh
とにかく、システム機能をカーネルに直接実装することで、システムはシェルやコマンド、ファイルシステムなしで完全に機能することができます。スクラッチ独自のシステムを持っている場合、この問題は常に確実です。
厳密に言えば、Debianの場合、シェルはPOSIXの親セットであるDebianポリシーに準拠する必要があります。サポートする必要がある他のものには、関数内で変数のローカル範囲を取得するキーワード/組み込み関数がsh
あります。local
²これはPOSIX仕様の基盤となるシェル(そのサブセット)ですが、sh
FLOSSとしてリリースされたことがないため、GNU / Linuxバージョンを見つけるのが難しいでしょう。
³yash
別のPOSIX互換シェルですが、通常はテキスト以外のデータを処理できないため、使用しません。 busybox ashはほとんどPOSIXと互換性がありますが、busyboxの構築方法によってはシステムコマンドの代わりにbusyboxアプレットを呼び出すことができます。 ksh93は主にPOSIXと互換性がありますが、local
Debianのポリシー要件をサポートしていません。また、見ることができますローカル変数を定義するために「local」キーワードをサポートするシェルのリスト