マウント解除:ターゲットは変数のために使用中です。

マウント解除:ターゲットは変数のために使用中です。

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"

関連情報