ubuntu/LinuxMintのshellのdash、組込shell変数の利用でbashとの違い
1.概要
ubuntuを長く利用しています。それ以前は、SlackwareとRedhat(centOS)を利用していました。どちらもbash shellを利用していました。shellは選択肢がありますが、私は標準のbash shellを愛用していました。商用Unixと異なりLinuxはbash shellであると思っていました。
shellは貝殻で、中身はkernelとの認識です。kernelと通信する中核に機能を持つものがshellであると私は思っています。Windowsの場合は、エクスプローラーがshellの機能を持ちます。Windowsの場合はmicro kernelが採用されています。
2.詳細
組込shell変数の$RANDOM利用に関してです。terminalで処理をします。
$ echo $RANDOM
12014
乱数が普通に表示されます。
これをshell scriptに変更します
test.shを作成します
#!/bin/bash
echo $RANDOM
実行します。
$ sh test.sh
結果は何も表示されません
bashを指定して実行します
/bin/bash test.sh
1521
乱数が表示されます。
shを調べてみるとdashが利用されています
$ which sh
/usr/bin/sh
$ ls /usr/bin/sh -l
lrwxrwxrwx 1 root root 4 12月 11 2024 /usr/bin/sh -> dash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 12月 11 2024 /bin/sh -> dash
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 125688 3月 23 2022 /bin/dash
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 1396520 3月 14 2024 /bin/bash
通常ならば気にすることはありませんが、差異があることは認識が必要です。
$ sh test.sh
を実行すると/usr/bin/shが呼び出されて、dash( /bin/dash )で実行されます。bashを強制的に利用したいのであれば、以下のようにします。
$ /bin/bash test.sh
この場合、/bin/bashを利用してtest.shを実行することになり、bash shellを利用します。
・rc.localを利用したubuntu/LinuxMintのPC起動時の処理実行
3.所見
dashの存在は知っていましたが、bashと大差なしと考えていました。偶然、shell内部で計算をする処理があり、仕様が異なることを実感しました。個人的なことですが、bashに統一されると良いと感じています。
bash shell以外のshellもケースにより利用しなければならない場合がありました。しかし、長く利用しているbash shellの方が気に入っています。しかし、ubuntuのdashはbashと異なる部分があることを知って、少しがっかりしています。
ubuntuがbashでなく、独自のdashを利用する理由をネットで調べると、「軽量なdashを採用している理由は、システムの起動やスクリプトの実行速度を高速化するため」とのことです。CPUの実行速度が遅い時代の影響だと思えます。現在のCPUの実行速度を考慮すると、標準のbashに移行するほうが良いと思います。
参考
[本ブログ内参照]・rc.localを利用したubuntu/LinuxMintのPC起動時の処理実行
[外部サイト参照]
・【Linux】sh/bash/sourceの違い,bash/dashの違い
・【Linux】sh/bash/sourceの違い,bash/dashの違い
コメント
コメントを投稿