web-dev-qa-db-ja.com

ダッシュはkshとどの程度互換性がありますか?

プロセスで何も中断せずに、/bin/sh/bin/kshではなく/bin/dashにシンボリックリンクさせることはできますか?どちらもPOSIXに準拠しているはずですが、交換が問題なく行われることを合理的に期待できますか?

1

/bin/shはUbuntuでは何年もbashでしたが、FWIWは Solarisの新しいバージョンではksh9 なので、ほとんどのことが機能するはずです。どちらかといえば、kshのような高度なシェルのPOSIXモードはダッシュよりもリベラルなので、いくつかの新機能がまだ利用可能です。

~ for Shell in dash bash ksh zsh; do ARGV0=sh POSIXLY_CORRECT=1 $Shell -c 'echo -n $0 {a,b,c}; [[ -z $POSIXL_CORRECT ]] && echo typo'; done
sh {a,b,c}sh: 1: [[: not found
sh a b ctypo
-n sh a b c
typo
sh {a,b,c}typo
$ for Shell in dash bash ksh zsh; do ARGV0=sh $Shell -c 'echo -n $0 {a,b,c}; [[ -z $POSIXL_CORRECT ]] && echo typo'; done
sh {a,b,c}sh: 1: [[: not found
sh a b ctypo
sh a b ctypo
sh {a,b,c}typo

Ubuntuのパッケージのスクリプトは、ダッシュlackのブレース拡張に依存しているとは思いません。 /usr/binのスクリプトをすばやくスキャンしても、そのようなものは表示されません。 kshとbashのPOSIXモードで利用できる他の最新の機能があるため、これらのシェルでスクリプトを実際に実行せずに予測することは困難です。

ただし、/bin/shをkshにすることには何のメリットもありません。

1
muru