BASH - コマンドが見つかりません - LUKSによるLVM自動化スクリプト

BASH - コマンドが見つかりません - LUKSによるLVM自動化スクリプト

私はLUKS外付けハードドライブを介してLVMをオン/オフするプロセスを自動化するbashスクリプトを書いてきました。ただし、28行目でエラーが発生し続けます。

$(vgchange -a n ; cryptsetup luksClose vol)

私が受け取ったエラー:

$ sudo ./encryption.sh -l
Locking System..............
./encryption.sh: line 28: 0: command not found
System Locked!

参照用の残りのコードは次のとおりです。

if [ $1 = -u ] ; then
    $(cryptsetup luksOpen /dev/sdb2 vol)
    echo "Unlocking.................." | pv -qL 10
    $(mount /dev/mapper/vol-lvroot /mnt ; mount /dev/mapper/vol-lvvar /mnt/var ; mount /dev/mapper/vol-lvhome /mnt/home ; mount /dev/sdb1 /mnt/boot)
    echo "System Mounted!" | pv -qL 10
#   exit 0
fi

if [ $1 = -l ] ; then
    $(umount /mnt/var ; umount /mnt/home ; umount /mnt/boot ; umount /mnt/)
    echo "Locking System.............." | pv -qL 10
    $(vgchange -a n ; cryptsetup luksClose vol)
    echo "System Locked!" | pv -qL 10
    exit 0
fi

その他の情報:

  1. 関連コマンドを個別にまたは対話的に実行すると、明らかなエラーは発生しません。

  2. 私はbashの作成が初めてなので、アドバイスと建設的な批判を歓迎します。

  3. プロセスは正常に完了したようですが、エラーやエラーを取り除く方法を理解できません。

  4. さらなる調査によると、インタラクティブモードで問題のコードを単独で実行すると、実行後の出力が提供されます。

これは、問題のあるコードを対話的に公開した後に提供されます。

0 logical volume(s) in volume group "vol" now active

答え1

コマンドをブロックに入れてコマンド置換を実行できます$( .. )。これは、ブロック内の命令が実行され、これらの命令の出力が実行される他の命令としてbashによって評価されることを意味します。したがって、コマンドがテキストを出力すると、

0 logical volume(s) in volume group "vol" now active

その後、シェルはそれをコマンドとして実行し、0起動時にその名前のコマンドを探します。

なぜはい$( .. )ブロックにコマンドを入れましたか?それで何を達成したいですか?

関連情報