Verifique se existe uma variável de ambiente para um usuário com su

0

Estou nisso desde os dias, preciso verificar um usuário $ 1 se houver uma Variável de Ambiente $ 2.

Eu tentei alguns casos:

 $ [[ -v a ]] && echo "a ok" || echo "a no"
 a no
 $ [[ -v $HOME ]] && echo "a ok" || echo "a no"
 a no 

(Então não (eu tentei no Bash > 4.2))

if [ su - ${1} -c "[ -z "${2}" ]" ]

Agora, estou tentando essa abordagem porque não acho o que está errado: /!

su - root -c "echo "$HOME" | wc | cut -d' ' -f2"
su - root -c "echo "$HOME" | wc | sed 's/ //g'"
    
por Chuck Noxis 28.10.2016 / 11:41

1 resposta

0

A sintaxe nos seus primeiros exemplos está incorreta. Se você escrever:

[[ -v $HOME ]]

Então você está realmente executando o comando:

[[ -v /home/yourusername ]]

Qual é claro que vai falhar. Você quer:

[[ -v HOME ]] && echo ok || echo no

Você pode combinar isso com su para obter:

su - root -c "[[ -v HOME ]]" && echo ok || echo no

Seus últimos exemplos não funcionarão porque você não pode aninhar aspas e porque a expansão da variável shell ocorre antes da execução do comando. Isto é, dado:

su - root -c "echo "$HOME" | wc | cut -d' ' -f2"

O comando que você executa realmente será:

su - root -c 'echo /home/somesuser | ...'

Se você quiser o valor de $HOME da perspectiva de root , precisará evitar a expansão de variáveis no shell local, por exemplo, usando aspas simples:

su - root -c 'echo $HOME | ...'

Não está claro para mim por que você está passando a saída para wc , porque a contagem de palavras de $HOME quase sempre será 1 . Em vez de pós-processar a saída de wc com sed ou cut , basta usar a opção -w para obter a contagem de palavras:

su - root -c 'echo $HOME | wc -w'
    
por 28.10.2016 / 14:23