インストーラスクリプト1に次のテストを書きたいと思います。
if [ -n "`/etc/grub.d/30_os-prober`" ]; then
install_dual_boot
else
install_linux_only
fi
30_os-prober
ただし、何らかの方法で完了できなかったため、出力が生成されない可能性があります。ゼロ以外のシャットダウン状態で失敗した場合、30_os-prober
デュアルブート状況を想定する方が安全です。
30_os-prober
出力が生成されていないことをどのように確認できますか?正常に?
基本的に次のような効果を得たいと思います。
if [ -n "`/etc/grub.d/30_os-prober`" ]; then
# Do stuff for a dual-boot machine
install_dual_boot
elif ! /etc/grub.d/30_os-prober >/dev/null; then
# OS probe failed; assume dual boot out of abundance of caution
install_dual_boot
else
install_linux_only
fi
...しかし、同じコマンドを2回実行する必要はありません。
1背景情報:30_os-prober
Inc。GRUB2、私が作成しているスクリプトは私のカスタム設定の一部です。固定資産投資。
答え1
まず、機能的には同じですが、以下$(…)
より小さいと広く考えられています。`…`
これ、これとこれ。第二に、$?
コマンドが成功したか失敗したかを確認する必要はありません。最近私の関心が集中した場所はセクション 2.9.1,簡単なコマンド
~のグループシェルとユーティリティの基本コードを開く(問題7):
「単純なコマンド」は、任意の順序で任意の変数割り当ておよびリダイレクトのシーケンスであり、任意にワードおよびリダイレクトが続き、制御演算子によって終了される。
与えられた単純なコマンドを実行する必要があるとき...
⋮ (wwwwwww…)コマンド名がある場合は、次の説明に従って実行を続行する必要があります。命令の検索と実行。コマンド名はありませんが、コマンドにコマンド置換が含まれている場合、コマンドは最後に実行されたコマンド置換の終了状態で完了する必要があります。 …
例えば、
コマンドの終了ステータス
ls -ld "module_$(uname).c"
終了状態
ls
ですがコマンドの終了ステータス
myfile="module_$(uname).c"
終了状態です
uname
。
だからフェラーダの答えこれは少し単純化することができます。
if 出力=$(/etc/grub.d/30_os-prober) && [ -z "$output" ] #つまり、30_os - 検出器 正常に出力を生成しません それから Linuxのみをインストールしてください その他 デュアルブートインストール フィリピン諸島
環境変数(またはスクリプト全体に表示される変数)にのみ名前を大文字にすることをお勧めします。制限された範囲の変数は通常、小文字(または必要に応じてcamelCase)で名前が付けられます。
答え2
変数に値を割り当ててから、終了ステータスも確認できます。
PROBE_VALUE=`/etc/grub.d/30_os-prober`
if [ "$?" -eq 0 ] && [ -z "$PROBE_VALUE" ]; then
install_linux_only
else
install_dual_boot
fi