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시작 시 해당 이름을 가진 명령을 찾습니다.

$( .. )블록에 명령을 넣었나요 ? 그걸로 무엇을 달성하고 싶나요?

관련 정보