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 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 será:
su - root -c 'echo /home/somesuser | ...'
Se você quiser o valor $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 $HOME
quase sempre será 1
. Em vez de pós-processar a saída de wc
with sed
ou cut
, você pode simplesmente usar a -w
opção para obter a contagem de palavras:
su - root -c 'echo $HOME | wc -w'