多くなりました。
シェルスクリプトはすぐに実行できるのでお手軽です。
最近になって知ったのですが、bashだと文字列の
切り出しなども行えます。書式は
${変数:開始位置:長さ}
で、例えば、
hoge="Gentoo1"; echo ${hoge:0:6}
とすると、6文字だけが切りだされて
Gentoo
と表示されます。
昔、Ubuntuのgrub2でgentooも起動させる方法 という記事で
/etc/grub.d/30_os-prober に
if [ $LABEL = "Gentoo" ] || [ $LABEL = "Gentoo1" ] ; thenを追加。というような事を書いたのですが、これは
continue
fi
if [ ${LABEL:0:6} = "Gentoo" ] ; thenと書けるんじゃなかろうか?
この方が Gentoo のパーティションが増えて
Gentoo1 Gentoo2 Gentoo3 ... がやってきた時も安心。
と思ってやってみたら、これがダメ。エラーになります。
その原因は、Ubuntu の/bin/sh は(bash ではなくて)
dash というシェルになっているからでした。
dash は文字列の切り出しをサポートしていないようです。
検索してみると、Ubuntu Wiki “DashAsBinSh" に
awk を使う方法が掲載されていました。
string=$(echo $string_after | awk '{ string=substr($0, 1, 3); print string; }' )というような記述になるようです。
先の
if [ ${LABEL:0:6} = "Gentoo" ] ; thenは、dash の場合
LB6=$(echo $LABEL | awk '{ s=substr($0, 1, 6); print s; }' )と(1行増えますが)書けることになるようです。
if [ $LB6 = "Gentoo" ] ; then
もっとも、こんなことをしなくてもスクリプト先頭行の
#! /bin/sh
を
#! /bin/bash
にしてしまえば
if [ ${LABEL:0:6} = "Gentoo" ] ; then
という記述でも問題なく動くと思います。
まぁ、awk を使った処理は bash を dash に移植する
ときの参考にしてくださいませ。
前の(今日に近い)記事 ← | 最新記事 | 【全目次】 | → 次(過去)の記事