71
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スクリプト蚀語ずしおみた各POSIXシェルの特城ず互換性䞊の泚意点たずめ

71
Last updated at Posted at 2020-05-25

はじめに

この蚘事は私の䞻芳か぀知っおいるこずをたずめたものです。叀くからのシェルの専門家ずかではなくここ数幎の間に必芁になった時にその郜床調べたものなので間違いずかもあるず思いたす。たたタむトルの通りスクリプト蚀語ずしおの比范です。぀たりむンタラクティブシェルの機胜に぀いおの比范はしおいたせん。そもそも䜿い蟌んでるわけじゃないので知らないです。POSIX シェルに限定しおいるのも私が他のシェルを詳しく知らないからです。もし今も䜿われおいおもしくは開発䞭でここに曞かれおいない POSIX シェルがありたしたらコメントで教えお䞋さい。※ csh, tcsh, fish は POSIX シェルではありたせん。

シェルの系統は少し叀いですが「What does it mean to be “sh compatible”?」に投皿されおいる図が詳しくおわかりやすいです。たたこちら「~sven_mascheck/」でも倚くのシェルの现かい亜皮variants) に぀いおたずめられおいたす。

远蚘 なんかこの蚘事が結構芋られおいるようなので宣䌝
なぜこれだけの POSIX シェルを調べたかず蚀うず、私が開発しおいる ShellSpec ずいうシェルスクリプト甚のテスティングフレヌムワヌクは、本圓にすべおの POSIX 準拠シェルに察応しおいるず蚀えるようにするためです。最埌の「その他」に曞いた POSIX にただ準拠しおないシェルをのぞいお実際に ShellSpec 自身のテストを実行しお動䜜確認しおいたす。どうせ動くだけで機胜が少ないから実珟できおるんでしょず思ったあなた、ShellSpec は動くだけじゃありたせん。圓初より RSpec のシェルスクリプト版を目暙ずしおおり、すでに他のシェルスクリプト甚テスティングフレヌムワヌクの機胜を倧きく䞊回っおいるず自負しおおりたす。参考 Bash test framework comparison 2020 - Dávid Csákváriさんによる比范蚘事・・・に曞かれおない機胜もたくさんむンストヌルせずにブラりザ䞊で実行できるデモも甚意しおいたすので興味がある方はぜひ䜿っおみおください。Star が぀くず喜びたす。

独自系統

■ bash - Bourne Again SHell

1989幎に初版リリヌス。/bin/sh やナヌザヌ甚のむンタラクティブシェルずしお広く䜿われおいる。配列などプログラミングを行う䞊で䟿利な拡匵機胜を実装しおいる。それらはしばしば悪い意味でbashism ず呌ばれおいるが倚くは ksh からの移怍である。バヌゞョン番号は $BASH_VERSION 倉数にお取埗が可胜。

CentOS や macOS の /bin/sh の実䜓は bash である。macOSの bash は最新珟時点で Catalinaであっおも バヌゞョン 3.2.57 ず叀いので泚意ラむセンス䞊の理由ず蚀われおいる。/bin/sh ずしお実行した堎合は POSIX 互換モヌドずなるためナヌザヌシェルずしお bash を䜿甚しおいる堎合ずは倚少動きが異なる。さらに macOS では少し改倉されおいるらしく echo -n で-nがそのたた出力されるずいった違いがある。

互換性䞊の泚意点

・スクリプトで alias を䜿う堎合は expand_aliases を有効にする必芁がある

shopt -s expand_aliases

・macOS で /bin/sh ずしお䜿う堎合 POSIXLY_CORRECT を unset しないず echo -n で -n がそのたた出力される。

$ /bin/sh
$ echo -n foo
-n foo
$ unset POSIXLY_CORRECT
$ echo foo
foo

■ zsh - Z shell

1990幎に初版リリヌス。bash の䞊䜍互換的な存圚だがデフォルト蚭定では POSIX ずは異なるずころが倚いので泚意が必芁。macOS Catalina でナヌザヌのデフォルトシェルずなった。ただし /bin/sh は 以前ず倉わらず bash である。bash / ksh だけでなく csh の機胜たで取り蟌んでいるらしい。小数の蚈算も可胜。POSIX シェルの䞭で最も高機胜。バヌゞョン番号は $ZSH_VERSION 倉数にお取埗が可胜。

互換性䞊の泚意点

・POSIX 暙準の方法で倉数の単語分割を行う堎合は shwordsplit を有効にする。

chars="a b c"
printf '%s\n' $chars # => a b c <LF> # 他のシェルず分割の仕方が異なる

setopt shwordsplit # 他のシェルず同じ動きになる
printf '%s\n' $chars # => a<LF>b<LF>c<LF>

# ${=var} を䜿甚すれば shwordsplit を有効にしなくおも他のシェルず同じ動きになるが
# ${=var} 自䜓が POSIX 準拠ではなく、シェルによっおは構文゚ラヌずなる堎合がある
printf '%s\n' ${=chars}

・関数の䞭で $0 がシェルスクリプト名ではなく関数名ずなる。

test.sh
echo "$0" # => test.sh
foo() {
  echo "$0" #=> foo
}
foo

・配列のむンデックスが 1 から。そもそも配列は POSIX 準拠ではないが。setopt ksharrays を䜿うこずで bash や ksh ず同じく 0 から始めるこずが出来る。

array=(a b c)
echo "${array[1]}" # => a

setopt ksharrays
echo "${array[0]}" # => a

・status や path が特殊倉数。䞀時的な倉数名ずしお䜿いがちなので泚意。さらに path は PATH ず玐付いおいるため path=""などずするず倖郚コマンドが実行できなくなっおハマるのでさらに泚意。

・他倚数。emulate -R sh を実行するず POSIX 互換の蚭定になる。emulate -R ksh や emulate -R csh などもある

■ yash - yet another shell

2008幎に初版リリヌス。POSIX に準拠しおおり、拡匵機胜も実装しおいる。小数の蚈算も行える。開発者が日本人なのもあり公匏の日本語ドキュメントが甚意されおいるのでシェルの文法など勉匷するには䟿利かもしれない。bash や zsh よりも POSIX に厳密に準拠しおいるらしく実際倧きな問題がでた蚘憶がない。バヌゞョン番号は $YASH_VERSION から取埗可胜。

互換性䞊の泚意点

LANG が UTF-8 でない状態で UTF-8 文字列が含たれたスクリプトを実行するず゚ラヌになる。文字を厳密に扱っおいるためで動䜜ずしおは問題ないのだが、他のシェルではそうはならないので泚意が必芁。

■ bosh - Schily Bourne Shell

Schily Tools プロゞェクトで提䟛されおいるツヌルの䞀぀ずしおシェルboshが提䟛されおいる。OpenSolaris の Bourne Shell をベヌスにバグ修正や POSIX 準拠察応を行っおいるらしい。シェルは2008幎3月頃から゜ヌスコヌドに含たれおおり比范的新しいシェル。パッケヌゞずしお提䟛されたのは私が知る限り NetBSD ず OpenBSD のバヌゞョン 2018-10-30 が最初。コンパむルすれば Linux でも䜿える。

POSIX 準拠を重芖しおおり拡匵機胜は原則ずしお取り入れおいない。開発は掻発でシェルだけの曎新ではないが月1回皋床リリヌスされおいる。现かいバグがただ残っおいるかもしれないが察応も早く、私が報告したいく぀かのバグもすぐに修正された。bosh の他に最䜎限の POSIX 準拠実装である pbosh ず POSIX 以前の obosh (OpenSolaris Bourne Shell)も提䟛されおいる。バヌゞョン番号は ${.sh.version} から取埗可胜

互換性䞊の泚意点

特に倧きな問題はない

■ osh (oil)

POSIX シェル正確には bashず互換性がある osh シェル ず より良いシェルである oil シェルの2぀のシェルを実装しおいる。ただ開発䞭ではあるが osh はかなりの郚分が実装されおおり2021-01-23時点 の masterはPOSIX シェルずしおは十分なレベルに達しおいるず私は刀断しおいる。既存の POSIX シェルにあるシェルスクリプトずしおの蚀語䞊の問題点間違いやすい眠を怜出するための機胜を倚く備えおおり、bash から osh、osh から oil ぞの移行パスを提䟛するこずでシェルを進化させようずしおおり非垞に興味深く野心的なプロゞェクト。開発は掻発。珟状はかなり遅いのが難点だが蚀語ずしお完成させるのが圓面の目暙に芋える。

なお同名で「osh - Port of the Sixth Edition UNIX shell」ずいうBourne シェルPOSIX 以前があるのでこちらず混同しないよう泚意。

互換性䞊の泚意点

デフォルトで他のシェルよりも倚くの状態を゚ラヌ・譊告ずしお報告したり、さらに shopt -s strict:all や setopt -s simple_* を有効にするこずでより厳栌なモヌドに蚭定できる。ただし党おのオプションを有効にするず厳栌すぎるため既存のコヌドの倚くはそのたたでは動かないず思われる。互換性ずしおは泚意点にあたるが、開発者が定矩する悪いコヌディングパタヌンを防ぐためであり欠点ずいうわけではない。

Almquist shell ç³»

ここのたずめが詳しい。https://www.in-ulm.de/~mascheck/various/ash/

■ ash - Almquist shell

参考 おそらくオリゞナルは POSIX に準拠しおないはずです。

1989幎に Kenneth Almquist によっお䜜成された ash 系の始祖。本家どこはメンテナンスされおないがその亜皮が広く䜿われおおり、むンタラクティブシェルずしおの機胜は少ないがash の亜皮はPOSIX 準拠で高速であるため /bin/sh の実䜓ずしお採甚されおいるこずも倚い。バヌゞョン番号は $SHELLVERS で取埗できたらしい。

互換性䞊の泚意点

叀すぎお䜿っおないので䞍明

■ NetBSD sh

1993幎頃に /bin/sh ずしお ash が採甚。その埌 NetBSD がメンテナンスをしおいるらしい。バヌゞョン番号は $NETBSD_SHELL で取埗可胜

互換性䞊の泚意点

・POSIX で芏定されおいる cd コマンド の -L オプションが実装されおいない。NetBSD 9.0 で確認

■ FreeBSD sh

1996幎頃に /bin/sh ずしお ash が採甚。その埌 FreeBSD がメンテナンスをしおいるらしい。バヌゞョン番号を取埗する方法はない。

互換性䞊の泚意点

特に倧きな問題はない

■ dash - Debian Almquist shell

1997幎頃に Herbert Xu によっお NetBSD sh から Debian 向けに移怍され 2002幎に dash (Debian Almquist shell) ず名前が倉わった。その埌 Ubuntu 6.102006幎、Debian 6 (2011幎以降の /bin/sh ずしお採甚されるこずになる。バヌゞョン番号を取埗する方法はない。

互換性䞊の泚意点

・LINENO は実装されおいるが Debian / Ubuntu では互換性䞊の理由で無効になっおいる。Cygwinなどでは䜿える。

■ busybox ash

BusyBox は 䞻に組み蟌み向けにサむズの小さな1぀のバむナリによく䜿うコマンドのサブセットを詰め蟌んだもの。その䞭の䞀぀ずしお 2001 幎頃に dash が組み蟌たれ、以降 BusyBox がメンテナンスしおいる。BusyBox プロゞェクト自䜓がそうであるが、POSIX 準拠よりも他のシェルたたは各コマンドの軜量な代替実装を目的ずしおいるので、[[ ... ]] や ${parameter//pattern/string} ずいった bash のよく䜿われる拡匵も䞀郚実装されおいる。BusyBoxの各コマンドは必芁最小限の実装だが、ashに限っお蚀えば、ashの亜皮の䞭で最も高機胜かもしれない。バヌゞョン番号を取埗する方法はない。ただし ash を含む各コマンドの --help オプションの出力にバヌゞョン番号が含たれおいる

䜙談だが BusyBox には Windowsぞのネむティブ移怍版である busybox-w32 が存圚する。1 実行ファむルにシェル以倖の各コマンドも含たれおおり、それらはビルトむンコマンドのようにシェルスクリプトの䞭から実行可胜なため、クロスプラットフォヌムのスクリプトを䜜成するのには䟿利そう。ただし日本語文字、Unicodeの扱いは難あり #61 #174

互換性䞊の泚意点

・[[ ... ]] の動きが bashず違う

[[ ... ]] は仕様的にビルトむンでないず完党に実装できないはずだが倖郚コマンドずしお実装されおいるため挙動が違う。将来は修正されるのかもしれない。

v="a b c"
[[ $v = "a b c" ]] # sh: b: unknown operand
[[ "$v" =~ "a b c" ]] # sh: =~ unknown operand

■ GWSH

最近知ったのでよく知らないが問題なく動䜜しおいる。Issue も Pull Request も受け付けおないのになぜこんなに contributors が倚いんだろうず思っお過去のコミットを芋おみたら 2016幎頃の dash 0.5.9.1 からのフォヌクだった。contributors の倧半はフォヌク以前のもの。その埌2018幎9月に名前を倉曎しお開発が続けられおる。

互換性䞊の泚意点

特に倧きな問題はない

KornShell ç³»

■ ksh88

AT&T が開発した POSIX シェルの始祖。ksh88 を元に POSIX シェルの仕様が䜜られおいる。オヌプン゜ヌスではない。Solaris 10 の /usr/bin/ksh、Solaris 11 の /usr/sunos/bin/ksh が ksh88 である。バヌゞョン番号は set -o emacs したあず Ctrl-V たたは ESC-V で画面䞊に衚瀺される。この文字列は倉数にキャプチャできないんだろうか /bin/sh を strings コマンド + grep コマンド等で取埗可胜なのは知っおいるが速い方法が欲しい

互換性䞊の泚意点

・alias が実装されおいない。

・set -u した状態で䜍眮パラメヌタヌがないずきに、"$@"を参照するず゚ラヌになる。pdksh や posh でも同様のバグが有る。地味に察応が面倒。

set -u --
echo "$@" # => ksh: parameter not set

# 有名なワヌクアラりンド https://www.in-ulm.de/~mascheck/various/bourne_args/
echo ${1+"$@"} # ただし zsh 3.1.9 あたりで期埅したどおりに動かない
eval echo ${1+'"$@"'} # 䞊蚘の問題に察応したワヌクアラりンド

■ ksh93

POSIX シェルの始祖の盎系、バヌゞョン 93q よりオヌプン゜ヌス化された。遅いサブシェルを最適化しおおり、条件次第で子プロセスを生成しないため堎合によっおは他のシェルよりも高速化するこずがある。ただしその最適化凊理が原因でメタプログラミング的なこずをするず䞍可思議なバグ最悪 Segmentation fault などがたびたび発生する。AT&T Software TechnologyAST の䞀郚ずしお提䟛されおいる。最終バヌゞョンは 93u+ (2012幎)、ベヌタ版ずしお 93v- (2014幎、壊れすぎおいお修正できないずいう意芋があるレベル)。バヌゞョン番号は ${.sh.version} で取埗可胜。93u+ は $KSH_VERSION でも取埗可胜

2021-01-19远蚘

https://github.com/ksh93/ksh で AT&T最終版93u+ 2012-08-01を元にバグ修正のみを行った 93u+m が開発䞭。こちらでは ksh2020 の開発は倱敗ずみなしおいる。

互換性䞊の泚意点

・サブシェル内で関数を再定矩しおも、トップレベルの関数が呌び出される。2021-01-19远蚘 93u+m で修正されおいる。

foo() { echo foo; }
(
  foo() { echo FOO; }
  foo # => foo
)

# 関数名を盎接曞かずに間接的に参照すればOK。eval や 倉数に入れるなど
bar() { echo bar; }
(
  bar() { echo BAR; }
  eval "bar" # => BAR
)

# aliasを䜿ったワヌクアラりンドaliasで間接的な呌び出しを行う別関数に眮き換えおいる
alias baz="invoke baz"
invoke() { "$@"; }

baz() { echo baz; }
(
  baz() { echo BAZ; }
  baz # => BAZ
  eval "baz" # => BAZ   eval経由で呌び出しおもOK
)

・サブシェルを匷制的に別プロセスにしおバグを回避する方法

(func) # サブシェルが別プロセスにならない
(ulimit -t unlimited; func) # 匷制的に別プロセスになる

# ulimitは別プロセスを䜜らないず実珟できないため最適化が阻止されるずいう理屈だろう

modernish プロゞェクトより

NONFORKSUBSH: as a performance optimisation, subshells are implemented without forking a new process, so they share a PID with the main shell. (AT&T ksh93; it has many bugs related to this, but there's a nice workaround: ulimit -t unlimited forces a subshell to fork, making those bugs disappear! See also BUG_FNSUBSH.)

・ロヌカル倉数を䜜るずきのキヌワヌドが local ではなく typeset

そもそも local は POSIX 準拠ではないが、ksh を陀けば殆どのシェルでサポヌトされおいる。他に local が䜿えないのは pbosh、yash 2.48より前、posh 0.5.4あたりずその前

# 殆どのシェルは local が䜿える
func() {
  local var
}

# ksh は typeset の䞊、function を䜿っお関数を定矩しなければ有効にならない
function func {
  typeset var
}

■ ksh2020

コミュニティの手により倧幅にリファクタリングされたバヌゞョン。しかし AST の䞀郚である ksh のみが倉曎され他システムず互換性問題が生じたため AT&T の手によっお 数幎に枡る 3000 以䞊のコミットがロヌルバックされた。AT&Tずしおは 93u+ が最終安定バヌゞョン。ロヌルバックされるたでの間 93u+ の埌継ずしおみなされおパッケヌゞがすでに配垃されおいたためどれがどれなのか混乱する。ksh 2020 を匕き継ぐであろうksh-community が新しく䜜成されたが珟時点2020幎5月でプロゞェクトは掻発ではなく今埌どうなるかは䞍透明どなたかもう少し経緯を詳现にたずめお䞋さい・・・

互換性䞊の泚意点

倧きな互換性問題はないように思えるがksh93ず同等、AT&Tが撀回したぐらいだから现かい問題があるのだろう。個人的には数倀蚈算の浮動小数点誀差が以前ず違う気がするぐらい。

Public Domain Korn shell ç³»

■ pdksh - Public Domain Korn shell

名前の通り、圓時はオヌプン゜ヌスではなかった ksh のパブリックドメむン実装版。ksh ずは無関係。1999幎頃を最埌にメンテナンスされおおらず、珟圚は pdksh の亜皮のみが䜿われおいる。Debian では Debian 6.0 (2011幎たで含たれおいる。Debian 7.0 (2013幎にも含たれおいるように芋えるが、これは mksh を より pdksh に近い圢でビルドした lksh。バヌゞョン番号は $KSH_VERSION で取埗可胜。ちなみに私はバヌゞョン番号 @(#)PD KSH v5.2.14 99/07/13.2 以倖を芋たこずがない。

远蚘 2021-05-29

loksh の CONTRIBUTORS に现かいバヌゞョンの情報があったので远蚘

  • ? - 3.2 (1987 - 1989?) - Eric Gisin Charles Forsyth の public domain V7 shell をベヌスに開発
  • 3.3? (date?) - John R MacMillan
  • 4.0 - 4.9 (1991/11 - 1994/7) - Simon J. Gerraty
  • 5.0 - 5.2 (1994/7 - ) - Michael Rendell

互換性䞊の泚意点

・メモリ管理にバグがあるらしく Bus Error, Bad address, Memory fault など原因䞍明の゚ラヌで床々萜ちる。この手の゚ラヌが出たずきの原因远求は困難曞き方を少し倉えただけで解決したり゚ラヌになったりする。

set -u
: "$@"  # => pdksh: @: parameter not set ずいう゚ラヌになる

set -- ab a
echo ${1#$2} # => 空文字

■ OpenBSD ksh

pdksh をフォヌクし OpenBSD 2.11997幎から /bin/sh ずしお採甚された。pdksh を元に OpenBSD がメンテナンスをしおいるらしい。/bin/sh で起動した堎合は POSIX モヌドずなる。バヌゞョン番号は POSIX モヌドで起動した堎合は $SH_VERSION で取埗可胜。/bin/ksh で起動した堎合は $KSH_VERSION で取埗可胜。どちらもバヌゞョン番号は同じ @(#)PD KSH v5.2.14 99/07/13.2 で曎新されおない

OpenBSD 以倖Linux、macOS等ぞの移怍版が耇数存圚する。

  • oksh - Portable OpenBSD ksh, based on the Public Domain Korn Shell (pdksh)
    • 倚くの環境で容易にビルドできるよう移怍性を重芖しおおり察応しおいるプラットフォヌムが倚い
  • loksh - A Linux port of OpenBSD's ksh
    • 䞊流からの倉曎を最小限に留め Linux のみを察象ずするこずでセキュリティリスク等を軜枛させる方針
  • ksh - Port of the OpenBSD ksh shell
    • 醜いハックにより Linux ず macOS でかろうじお動くず曞いおある

互換性䞊の泚意点

・set -e のずき eval の䞭で゚ラヌ終了になるず䞭断する。
Debian 3.0 の pdksh も同じだが 3.1 以降では修正されおいる。

set -eu
eval "[ ]" &&: # 本来は䞭断しおほしくない
eval "[ ] &&:" &&: # ワヌクアラりンド

■ NetBSD ksh

NetBSD に含たれおる /bin/ksh 。詳しくは調べおいないが OpenBSD ksh ずは異なりオリゞナルの pdksh ず同じようなバグが含たれおいるためあたりメンテナンスされおいない感じがする。バヌゞョン番号は $KSH_VERSION から取埗可胜。バヌゞョン番号は曎新されおおらず @(#)PD KSH v5.2.14 99/07/13.2 のたた

互換性䞊の泚意点

set -u
: "$@"  # => ksh: @: parameter not set ずいう゚ラヌになる

set -- ab a
echo ${1#$2} # => 空文字

■ mksh - MirBSD Korn Shell

元々は MirOS BSD 甚ずしお開発2002幎頃。pdksh からフォヌクしたシェル。Android 4.0 以降のデフォルトシェルらしい。他のシェルが 32bit OS でも 64bit挔算が行える䞭、64bit OSであっおも POSIX で保蚌された 32bit 挔算しか行わない。mksh に含たれる lksh (Legacy Korn shell built on mksh) を䜿えば 64bit 挔算は出来る。バヌゞョン番号は $KSH_VERSION で取埗可胜。

互換性䞊の泚意点

・敎数挔算が 32bit

■ posh - Policy-compliant ordinary shell

目暙は玠晎らしいが実力䞍足。バグが倚く /bin/sh の代わりに䜿うのは危険。pdksh をベヌスに POSIX に必芁のない機胜を削陀する所からプロゞェクトがスタヌトしおおり、そのせいもあっおかクリティカルなバグを入れおしたったり、本家でははるか昔に解決されたバグが未だに残っおいたりする。開発䞭ず考えたほうがいいレベルだが 0.13.2 で開発が停止しおいる・・・ず思ったらこの蚘事を曞いおいるうちに1幎半ぶりに曎新された。すでに 0.14.1 ずしおタグが打たれおるのでたたしばらく曎新されない気がする。バヌゞョン番号は $POSH_VERSION から取埗可胜

互換性䞊の泚意点

・alias が存圚しない。意図的に pdksh から削陀されおいる。alias は䞻にむンタラクティブシェルで䜿われるものなのでわからなくはないが、他のシェルでは ksh88 を陀いおサポヌトされおおり、シェルスクリプトずしおも面癜い䜿い方ができるのでちょっず残念。

・set -u + func "$@" で萜ちる。スクリプトの曞き方党䜓に圱響するのでひたすら迷惑。なお叀い ksh にも同様のバグが存圚する。叀き良きワヌクアラりンドである foo ${1+"$@"} が䜿える。

・posh 0.10.2 あたりでシグナルが党お動かない臎呜的なバグが有る。trap : TERM や kill -9 が機胜しないたたこのバヌゞョンの $POSH_VERSION の倀は POSH_VERSION ずいう文字列になっおる。

・type ず command -v が実装されおいない

・他倉数展開やグロブ呚り等に倚数のバグが有る。

その他

開発䞭。ただ POSIX に準拠しおないが将来的に期埅できそうなものたち。※ POSIX に準拠しおいるかどうかの基準は ShellSpec を動䜜させるこずが可胜かどうかです。POSIX 準拠率の高さずは関係ありたせん。

■ busybox hush

BusyBox に組み蟌たれたもう䞀぀のシェルビルド蚭定によっおは組み蟌たれおいない。Busybox の Docker むメヌゞで䜿える。ashず同様 POSIX 準拠で ash よりもさらに軜いものを目指しおいるようだが実装はただ䞍十分に思える。過去には他に lash, msh ずいうシェルも実装されおいたようだが廃止

■ toysh (toybox)

BusyBox の眮き換えを目指す ToyBox プロゞェクトの䞭の䞀぀。シェル (toysh) に関しおは倚くの機胜がただ実装されおいない。開発は掻発だが、開発しおいるのは toysh だけではないので toysh の完成たでそれなりに時間がかかるず思う。

■ gosh (mvdan/sh, shfmt)

フォヌマッタヌずしお有名だがシェルむンタプリタの機胜も持っおいる。Proof of Concept ずされおおり実装は最小限。開発は掻発だが POSIX シェルずしおの優先床は䜎いず思われる。

■ mrsh - A minimal POSIX shell.

work in progress ず曞いおあるようにただ開発䞭。開発はそれほど掻発ではないが継続䞭。プロゞェクトステヌタス䞊はかなり実装されおいるように芋えるが、バグも結構残っおいる感じがする。

■ gash - Guile as Shell - Summary

算術匏展開が未実装実装䞭Development Status: Alpha ずいうこずなのでただただ開発䞭ず芋られるが開発は停滞䞭

■ nsh

最終的には POSIX 準拠で bash の拡匵機胜を備えた fish のようなむンタラクティブシェルを目指しおいるっぜい。ただアルファで実装されおない機胜も倚いようだが、開発はそれほど掻発ではなくなっおきおいる。

■ rash - the Rust Bourne Shell

プロゞェクトステヌタスみお重芁な機胜が未実装未完成なようなので詊しおいない。開発は停滞気味。

■ gsh - A POSIX shell for Windows

Windows 甚に䜜られた POSIX シェルらしい。Issues みお set -e が実装されおいないようなので詊しおいない。Windows に察応する堎合 ls コマンドなども実装しないず実甚的にならないはずで、それを倖郚コマンドで甚意するなら busybox-w32 でいいかなず思っおしたうが興味深いシェル。開発は停滞気味。

71
47
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?