bash 하위 쉘 내보내기 변수 [닫기]

bash 하위 쉘 내보내기 변수 [닫기]

불필요한 질문이셨다면 죄송합니다만, 인터넷에 여기저기 검색해 봤는데 아쉽게도 저와의 관계에서는 순서가 꽤 복잡합니다.

루트 권한으로 명령을 실행할 수 있도록 sudo 명령에 비밀번호를 연결하려고 합니다.

 echo 'PASSWORD' | sudo -S [...]

이것은 나에게 효과적입니다.

그러나 자체 파이프가 포함된 명령에 대한 루트 권한이 필요하면 문제가 발생합니다.

 echo 'PASSWORD' | sudo -S printf '%s' "OTHER_PASSWORD" | cryptsetup --batch-mode --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 luksFormat /dev/sd* -

따라서 하위 쉘 명령을 사용해 보았습니다.

echo 'PASSWORD' | sudo -S bash -c 'printf '%s' "OTHER_PASSWORD" | cryptsetup --batch-mode --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 luksFormat /dev/sd* -'

안타깝게도 따옴표는 printf 명령의 따옴표와 충돌하므로 사용할 수 없습니다.

이 문제를 해결하기 위해 여러 가지 괄호를 사용해 보았습니다. 이것은 작동합니다 :

echo 'PASSWORD' | sudo -S bash -c '(printf '%s' "OTHER_PASSWORD" | cryptsetup --batch-mode --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 luksFormat /dev/sd* -)'

그러나 이전에 생성된 변수를 사용하려면 해당 변수를 내보내는 데 어려움을 겪습니다.

 export storage="/dev/sda"
 echo 'PASSWORD' | sudo -S bash -c '(printf '%s' "OTHER_PASSWORD" | cryptsetup --batch-mode --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 luksFormat $storage -)'

 ERROR: Device - doesn't exist or access denied.

이 문제를 해결하는 쉬운 방법이 있나요?

답변1

변수는 작은따옴표로 확장되지 않습니다.

sudo -S bash -c '(printf '%s' "OTHER_PASSWORD" | ... luksFormat $storage -)'
                                                                ~~~~~~~~

주변 따옴표는 %s실제로 문자열이 인용되지 않았음을 의미합니다(여기에 강조 표시된 구문에 표시됨). 그러나 다행스럽게도 %s특별한 의미가 없으므로 이는 중요하지 않습니다.

관련 정보