Ubuntuではデフォルトでは bash でなく dash が使われています。
スクリプトから bashに変更できる方法を説明します。
背景
Ubuntuはデフォルトシェルが dashで、それで困ることはそれほど多くないのですが bash が好きな方もいるかと思います。
また、ちゃんとシェバンを書いていないお行儀の悪いスクリプトがいたりすると困ってしまいます。
Bashism あふれるスクリプトなのにシェバンが #!/bin/sh となっていたら殺意すら覚えます。
そこで今回は、まず一般的に解説されているUbuntuのデフォルトのシェルをbashにする方法を説明します。
その方法は dpkg-reconfigure を使いますが、この方法はインタラクティブなコマンドなのではスクリプトでは使えません。
そこでさらにスクリプトで使える代替の方法も説明します。
ちなみに確認環境は WSL Ubuntu20.04です。
| |
簡単な方法
下記のように実行します。
| |
環境や言語設定によって表示が違いますが「dash をデフォルトのシステムシェル(/bin/sh)として使いますか?」という意味のことを聞かれるので「No」「いいえ」を選択します(環境によって「No」と入力する場合もあります)。
実行したら念のため、/bin/sh を確認します。下記のように bash を指していれば問題ありません。
| |
スクリプトでも使える方法
上記の dpkg-reconfigure ですが、No と選択する必要があるためスクリプトでは使えません。ならばと下記のように
Yes コマンドを使ってみてもダメでした。
| |
代わりに下記のように実行すれば上記と同じことができます。選択が不要になるのでこのままスクリプトに使えます。
| |
実行後に /bin/sh を確認するとちゃんと bash を指しているはずです。 コマンドの詳細は下記にかいてありました。 https://superuser.com/questions/715722/how-to-do-dpkg-reconfigure-dash-as-bash-automatically
Dockerfile での書き方
スクリプトで書けないと Dockerfile でも困ってしまいます。Dockerfile では下記のようにすればOKです。
| |
まとめ
Ubuntu(WSL含む)でのデフォルトシェルを bash に変更する方法を説明しました。
一般的に使われている dpkg-reconfigure はスクリプトでは使えないのでその代替の方法も説明しました。
参考になれば幸いです。