BASH - 未找到命令 - LVM 通过 LUKS 自动化脚本

BASH - 未找到命令 - LVM 通过 LUKS 自动化脚本

我一直在编写一个 bash 脚本来自动化通过 LUKS 外部硬盘打开和关闭 LVM 的过程。但是我在第 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

然后 shell 将尝试将其作为命令运行,并在启动时0查找具有该名称的命令。

为什么你把命令放在$( .. )块里了吗?你想用它来实现什么目的?

相关内容