Tentando usar o sudo com o subshell bash: variáveis env não funcionam

2

Eu li alguns outros posts, parece complicado fazer vários comandos dentro do sudo. Heredocs sofrem de limitação de não poder fazer o redirecionamento de stdin / stdout. Aqui, em qualquer caso, é uma parte da lógica que eu quero executar, editada para conter um problema específico: o DIR env var não 'vive' após sua instanciação no primeiro comando? Qual é a maneira correta de ter env envs vars dentro da subshell?

  $ sudo -- /bin/bash -c "(export DIR=/etc/sources.list.d; echo dir is $DIR; mkdir -p $DIR; touch $DIR/cloudera.list)"

dir is
mkdir: missing operand
Try 'mkdir --help' for more information.
    
por javadba 10.03.2013 / 05:49

1 resposta

4

O problema não está em sudo , mas nas suas citações. Use aspas simples em vez de aspas duplas.

Se você quiser que uma variável seja interpretada por um subshell em qualquer contexto ( sudo , ssh , etc.), você precisa escapar do seu significado especial para que sua análise não ocorra dentro do shell atual.

Isso está efetivamente sendo enviado para o sudo:

/bin/bash -c (export DIR=/etc/sources.list.d; echo dir is ; mkdir -p ; touch /cloudera.list)

    
por 10.03.2013 / 06:50

Tags