私は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
その他の情報:
関連コマンドを個別にまたは対話的に実行すると、明らかなエラーは発生しません。
私はbashの作成が初めてなので、アドバイスと建設的な批判を歓迎します。
プロセスは正常に完了したようですが、エラーやエラーを取り除く方法を理解できません。
さらなる調査によると、インタラクティブモードで問題のコードを単独で実行すると、実行後の出力が提供されます。
これは、問題のあるコードを対話的に公開した後に提供されます。
0 logical volume(s) in volume group "vol" now active
答え1
コマンドをブロックに入れてコマンド置換を実行できます$( .. )
。これは、ブロック内の命令が実行され、これらの命令の出力が実行される他の命令としてbashによって評価されることを意味します。したがって、コマンドがテキストを出力すると、
0 logical volume(s) in volume group "vol" now active
その後、シェルはそれをコマンドとして実行し、0
起動時にその名前のコマンドを探します。
なぜはい$( .. )
ブロックにコマンドを入れましたか?それで何を達成したいですか?