プロセスで何も中断せずに、/bin/sh
を/bin/ksh
ではなく/bin/dash
にシンボリックリンクさせることはできますか?どちらもPOSIXに準拠しているはずですが、交換が問題なく行われることを合理的に期待できますか?
/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にすることには何のメリットもありません。