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

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

Estou nisso há dias, preciso verificar se há um usuário $ 1 se existe 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 (tentei no Bash > 4.2))

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

Agora, estou tentando essa abordagem porque não encontro o que há de errado:/!

su - root -c "echo "$HOME" | wc | cut -d' ' -f2"
su - root -c "echo "$HOME" | wc | sed 's/ //g'"

Responder1

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

[[ -v $HOME ]]

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

[[ -v /home/yourusername ]]

O que, claro, irá falhar. Você quer:

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

Você pode combinar isso com supara 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 será:

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

Se você quiser o valor $HOMEda 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 $HOMEquase sempre será 1. Em vez de pós-processar a saída de wcwith sedou cut, você pode simplesmente usar a -wopção para obter a contagem de palavras:

su - root -c 'echo $HOME | wc -w'

informação relacionada