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'