macOS の /bin/sh の正体はネットで調べてもよくわからん…と思っていたら man sh(1) に書いてあった。基本を忘れている…
sh is a POSIX-compliant command interpreter (shell). It is implemented by re-execing as either bash(1), dash(1), or zsh(1) as determined by the symbolic link located at /private/var/select/sh. If /private/var/select/sh does not exist or does not point to a valid shell, sh will use one of the supported shells.
bashならでわの高機能部分は使わない (スコア:0)
普通のshでも動くシェルスクリプトをbashで動かしてるな
bashオリジナル機能を使うことはまず無い
Re:bashならでわの高機能部分は使わない (スコア:0)
普通のshって何なんだろ。
Debianはdash、Archはbash、Androidはmkshだっけ。
bashをshで起動したらPOSIX互換モードだけどもbash固有機能は使える。
Re: (スコア:0)
Unix version 7 で規定されている Bourne Shell [wikipedia.org] でしょう。
Re:bashならでわの高機能部分は使わない (スコア:2)
POSIX規格で規定されるUnix系システムではBourne Shell後継のPOSIX準拠のシェルに置き換わっており、POSIXに準拠していないBourne Shellはすでに使われていない。
(wikipedia)
今時 POSIX に準拠していない Unix を使うとは思えません。Bourne Shell を使っている Linux は無いでしょう。すでに使われていないものが「普通のsh」ということはありません。
「普通のsh」(実際にはどこでも使えるsh)は POSIX 準拠シェルを想定すれば良いと思います。個々の POSIX 準拠シェル自体は POSIX 準拠シェル+独自機能なので、POSIX モード bash などを「普通のsh」と考えるとハマりますが。
Linux でも Docker や Raspberry Pi OS のように bash が無い環境もありますし。
参考 Qiita:
Bourne Shell(古いsh)とPOSIXシェル(現在のsh, bash, etc)の違い [qiita.com]
どこでも動くシェルスクリプトを書くための ~ POSIXモードの基礎知識(前編) [qiita.com]
どこでも動くシェルスクリプトを書くための ~ POSIXモードの基礎知識(後編) [qiita.com]
macOS の /bin/sh の正体はネットで調べてもよくわからん…と思っていたら man sh(1) に書いてあった。基本を忘れている…
sh is a POSIX-compliant command interpreter (shell). It is implemented by re-execing as either bash(1), dash(1), or zsh(1) as determined by the symbolic link located at /private/var/select/sh. If /private/var/select/sh does not exist or does not point to a valid shell, sh will use one of the supported shells.
macOS の /bin/sh は bash とは限らないわけか。変更する人がいるのか、という疑問はありますが。
/bin/sh が単なる /private/var/select/sh へのシンボリックリンクでは無い理由はなんだろう?
Re: (スコア:0)
Wikipedia鵜呑みにするバカ
互換性なくなるからデフォルトはPOSIX非準拠シェルに決まってるだろうが。
Solaris10とか11までは当然旧来のB-shell。(そもそもSolarisがすでに使われていない?そりゃそうだ)
オプションでPOSIX準拠シェルに変更できるようになってさえいればPOSIX準拠名乗っていいんだから。
Re:bashならでわの高機能部分は使わない (スコア:2)
Wikipedia鵜呑みにするバカ
互換性なくなるからデフォルトはPOSIX非準拠シェルに決まってるだろうが。
Solaris10とか11までは当然旧来のB-shell。(そもそもSolarisがすでに使われていない?そりゃそうだ)
Solaris 11(2011年リリース)の /bin/sh は ksh93 で、Bourne Shell ではないとある。
https://docs.oracle.com/cd/E26924_01/html/E25934/userenv-1.html [oracle.com]
Oracle Solaris 11 では、ユーザー環境とコマンド行引数に対して、次を含む変更が導入されました。
シェルの変更 - デフォルトのシェル /bin/sh が ksh93 にリンクされるようになりました。デフォルトのユーザーシェルは Bourne-Again (bash) シェルです。
レガシー Bourne シェルは /usr/sunos/bin/sh として使用可能です。
Solaris 10 は古すぎるし、とっくにサポート切れだろう。
Re:bashならでわの高機能部分は使わない (スコア:1)
Solaris 10 の Extended Support は 2024 年まで [oracle.com]なのでサポート切れではない。
Bourne shell ではなくて、何か別の名前がついていた気がするが…。
アレゲなニュースと雑談サイト
Re:bashならでわの高機能部分は使わない (スコア:2)
いつの間にか 3年延長されていた。失礼。
https://blogs.oracle.com/solaris/post/great-news-about-extended-suppor... [oracle.com]
Re: (スコア:0)
shの書籍としては20年以上前のものしかなくて、現状にあっていないんですよね。
名著「入門UNIXシェルプログラミング」の超詳細なレビューをしてみた(古い内容の訂正)
https://qiita.com/ko1nksm/items/0fa2f73dd6d9822518a3 [qiita.com]
シェル絡みの記事といえば(Re:bashならでわの高機能部分は使わない) (スコア:0)
最近だと、日経Linuxだったかソフトウェアだったかで連載してた「シス管女子」シリーズが一応シェル絡みだったような(書籍化してたはず)。
あと、たまにSoftware Designでシェル芸の記事が載ってる。これはかなり趣味的な世界(※個人の感想です)。
Re: (スコア:0)
> /bin/sh が単なる /private/var/select/sh へのシンボリックリンクでは無い理由はなんだろう?
たぶん間違って/private/var/select/shを消したりしてもフォールバック出来るようにするためだと思う
怖いからしないけど
Re: (スコア:0)
Solaris で動くように書く癖がついていて、未だにぬけていない。ちなみに最後に使っていたのは、Solaris 8 だ。上記の wikipedia の記事中 [wikipedia.org]からすると、SVR4 向けとなるらしい。