Linuxで `ash`と`sh`シェルの違いは何ですか?

Linuxで `ash`と`sh`シェルの違いは何ですか?

私はLinuxの多くのツールに初めて触れました。クイック検索は役に立ちませんでした。ちょうどあなたbashについてのより多くの情報を得て、それを検索することは何とか検索結果に現れるsh傾向がありました。bash私が見たもの以外にはさまざまなシェルタイプがあるので、zshすべてそのソースから出たフォークであると推測しますsh

すでに質問があります。bashとshを使ってスクリプトを実行することの違いは何ですか?これは次のようになります。

  • しかし、シェルで「a」が何を意味するのかはわかりません。
  • この質問は、単にスクリプトの実行に関するものではなく、シェル自体に関するものです。なぜなら、Dockerコンテナを使用ashまたは使用するオプションがあるからです。sh

ashもっと快適だったが、まだスリムだった記憶が出ますね。なぜなのか覚えていません。

ashとの主な違いは何ですかsh?サイズ、ハンドリング…?

基本画像は、python:3-alpine最新のタグ(2022-07)が付いた画像にも/bin/ash科がすべてあることです/bin/sh。これら2つがアルパイン画像に表示される理由はあります。この画像はその中で最もコンパクトです。私はそれを呼んだdocker-compose -f docker-compose-develop.yaml run --rm MY_CONTAINER ash

答え1

歴史的にashそれはアルムキストの殻でした。「sh互換」とはどういう意味ですか?-styleシェルの全体的な文脈でその歴史を提供しますshAlmquist Shellのソースコードはどこにありますか?どこで見つけることができるか説明してください。

今日、Almquist ShellashまたはdashBusyboxというシェルを提供するLinuxシステムでは、両方ともashAlmquist Shellから派生していますが、かなりの違いがあります。

コンテナを含む現在のLinuxシステムには、3つの一般的なシナリオがあります。

  • shBash(shモード)です。いつもより良いです。ash
  • shis dash(Debian 派生) — これらのシステムでは、インストールは から へのシンボリックリンクをash生成し、 と のサイズが同じです。ashdashashsh
  • shBusyboxです。詳細はBusyboxの構築に使用されるオプションによって異なりますが、デフォルトではBusyboxは同じサイズにshなりますashashsh

(Android(またLinux)ではshyesであり、mkshBashにも同じ説明が適用されます。)

シェルは呼び出し方法に応じて動作を変更できるため、シェルを起動すると他の経験が発生する可能性がashありshます。しかし、私が知っている限り、デフォルトではshBusyboxではそうではありませんash(コンテナイメージの場合と同様)。

答え2

不明瞭に考える違いは、どれがashより快適なのかを尋ねるshものです。与えられたサンプルコンテナはそれを表示しません。

オートコンプリートとは、項目の先頭に書き込んでから、<Tab>それを押すとフルネームを入力できることを意味します。たとえば、をターゲットにする場合はcd MY_FOLDER+cd M<Tab>十分であるか、別のフォルダにあるファイルを開き、サブパスを段階的に追加するなどです。

逸話的にどのコンテナでこのようなことが起こったのかは不明です。私も役に立たないヒントかもしれませんが、古いバージョンにはいくつかの古い画像がまだ存在するはずです。

関連情報