ShellLinux上的
Linux上的ash
和sh
shell有什麼區別?
我對 Linux 上的許多工具都很陌生。快速搜尋沒有幫助,我只獲得了更多關於
bash
or的資訊sh
,並且搜尋它以某種方式傾向於bash
在搜尋結果中。那裡有很多不同的外殼類型,我什至見過zsh
,因此我猜它們都是來自sh
.已經有一個問題了,使用bash和sh執行腳本有什麼區別?這是相似的:
- 但我不知道外殼中的“a”代表什麼
- 這個問題也不僅僅是關於執行一個腳本,而是關於 shell 本身——因為我可以選擇使用手頭
ash
的sh
docker 容器。我記得
ash
會更舒服,雖然仍然很苗條,但我忘記了為什麼。
ash
和之間的主要區別是什麼sh
?尺寸,處理,…?基本圖像是
python:3-alpine
,我用docker-compose -f docker-compose-develop.yaml run --rm MY_CONTAINER ash
.
從歷史上看,
ash
是Almquist Shell。“sh 兼容”是什麼意思?sh
給出了它在-style shell的整體上下文中的歷史,以及在哪裡可以找到 Almquist Shell 的原始碼?說明在哪裡可以找到它。如今,在提供名為 的 shell 的 Linux 系統上
ash
,它是dash
或者是 Busyboxash
,兩者都派生自 Almquist Shell,但有顯著差異。在目前的 Linux 系統上,包括在容器中,存在三種常見情況:
sh
是 Bash(在sh
模式下)——這總是比ash
sh
isdash
(Debian 衍生產品)——在這樣的系統中,安裝ash
會產生一個從ash
to的符號連結dash
,所以ash
和sh
大小相同sh
is Busybox — 具體取決於建構 Busybox 時使用的選項,但預設情況下,現在 Busyboxsh
是ash
, 所以ash
和sh
具有相同的大小(在同樣是 Linux 的 Android 上
sh
是mksh
,同樣的註釋也適用於 Bash。)Shell 可以根據它們被呼叫的方式改變它們的行為,因此啟動 Shell
ash
或sh
可能會導致不同的體驗。但是,據我所知,預設情況下 Busybox 不是這種sh
情況ash
(就像您的容器映像中的情況一樣)。