variável de exportação da subchave bash [fechada]

1

Me desculpe se essa é uma pergunta desnecessária, mas eu já pesquisei na internet e, infelizmente, o comando é bastante complexo para minhas relações.

Estou tentando enviar uma senha para um comando sudo para executar um comando com direitos de root:

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

Isso funciona para mim.

Mas, assim que preciso dos direitos de root para um comando que inclui um pipeline próprio, tenho problemas:

 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* -

Portanto, tento usar um comando subshell:

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* -'

Infelizmente, as vírgulas invertidas não podem ser usadas, pois estão em conflito com elas no comando printf.

Para resolver esse problema, tentei vários colchetes. Este trabalhou:

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* -)'

Mas se eu quiser usar uma variável criada anteriormente, chego até mesmo a exportá-los para problemas:

 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.

Existe uma maneira fácil de resolver esse problema?

    
por linuxguy 26.02.2017 / 13:12

1 resposta

1

As variáveis não são expandidas entre aspas simples.

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

Observe que as aspas em torno de %s na verdade significam que a string não é citada (como o realce da sintaxe aqui nos mostra), mas felizmente isso não importa, pois %s não tem significado especial.

    
por 26.02.2017 / 19:22