USBが使用中であることを確認し、結果を変数に保存したいと思います。
$ foo=$(umount /dev/sdb1)
$ umount: /path/mounted: target is busy.
しかし、印刷したいときに空の$foo
変数が表示されます。
$ echo $foo
$
私の究極の目標は、USBを削除することです。ターゲットが使用されている場合は、ユーザーに警告するために使用されますwhiptail
。だから:
$ [[ -z $foo ]] || whiptail --msbox "Cancel the operation that is maintaining your USB busy" 0 0
target is busy
エラーを変数に保存できますか?それとも別の技術を使うべきですか?
答え1
プログラムは通常、「標準エラー」I / Oストリーム(略称: "stderr")にエラーメッセージを書き込みます。その用語を検索すると、何百万もの結果が得られます。簡単に説明すると、stderrが存在するため、「標準出力」(「stdout」)がリダイレクトされると、次のようにエラーメッセージが画面に表示されることがあります。仮想コマンド
umount /dev/sdb1 > um.result.txt
変数にキャプチャしようとすると、エラーメッセージが画面に表示されることがわかります。
同じように短い答えは、次を使用して2>&1
stderrストリームをstdoutストリームにマージすることです。
foo=$(umount /dev/sdb1 2>&1)
エラーメッセージは変数に取り込まれます。
別の方法、Jordanがコメントで提案したように、終了状態を確認することです。このトピックのバリエーションは次のとおりです。
/dev/sdb1 削除 || ユーザーに苦情を申し立てます。
もし! /dev/sdb1 マウント解除 それから ユーザーに苦情を申し立てます。 フィリピン諸島
umount /dev/sdb1 2> /dev/null || ユーザーに苦情を申し立てます。
foo=$(umount /dev/sdb1 2>&1) || ユーザーに苦情を申し立てます。使用"$foo"