
저는 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
시작 시 해당 이름을 가진 명령을 찾습니다.
왜예$( .. )
블록에 명령을 넣었나요 ? 그걸로 무엇을 달성하고 싶나요?