RESOLVIDO, script atualizado adicionado - Obrigado a ambos @steeldriver e @user10489
A impressão do shell está fora de ordem e faltando algumas informações.
Sou novato em Linux e ainda estou na fase de copiar/colar e ver o que acontece.
Já tentei pesquisar no Google, mas não adiantou.
Estou executando um script que emprega várias maneiras de retornar o usuário atual.
O script usa
- chamadas diretas
- chamadas usando
sudo
- chamadas usando
sudo su -
Cada método deve retornar 7 valores, em vez disso, o primeiro e o segundo métodos retornam 5 valores, e o terceiro método retorna todos os 7.
O roteiro em questão:
#!/usr/bin/env bash
echo ""
echo "GET USER - DIRECT"
echo ""
whoami
echo $USER
id -u -n
logname
ps -o user= -p $$ | awk '{print $1}'
echo $SUDO_UID
echo $SUDO_USER
echo ""
read -p "Press enter to continue"
echo -e "\n"
echo "GET USER - SUDO"
echo ""
sudo whoami
sudo echo $USER
sudo id -u -n
sudo logname
sudo ps -o user= -p $$ | awk '{print $1}'
sudo echo $SUDO_UID
sudo echo $SUDO_USER
echo ""
read -p "Press enter to continue"
echo -e "\n"
echo "GET USER - SUDO SU -"
echo ""
sudo su -c 'whoami; echo $USER; id -u -n; logname; ps -o user= -p $$ | awk "{print $1}"; echo $SUDO_UID; echo $SUDO_USER; echo ""'
echo -e "\n"
A saída que obtenho:
player1@Arcade:~/Desktop$ ./testuser.sh
GET USER - DIRECT
player1
player1
player1
player1
player1
Press enter to continue
GET USER - SUDO
[sudo] password for player1:
root
player1
root
player1
player1
Press enter to continue
GET USER - SUDO SU -
root
root
root
player1
root
1000
player1
O que estou esquecendo aqui? Minha suposição é que a chamada direta de $SUDO_UID
e $SUDO_USER
é relacionada a permissões. A ordem em que a impressão está acontecendo ainda me intriga.
EDITAR:
entender o uso de sh -c
, citação adequada e acesso às variáveis $SUDO_xxxxx resolveu o problema.
Além disso, não consigo contar corretamente. O script tem como objetivo retornar 7 valores, não 6.
O script atualizado agora está funcionando como era de se esperar.
Obrigado a ambos pela ajuda!
meu script atualizado:
#!/usr/bin/env bash
echo ""
echo "GET USER - DIRECT"
echo ""
whoami
echo $USER
id -u -n
logname
ps -o user= -p $$ | awk '{print $1}'
sh -c 'echo $SUDO_UID'
sh -c 'echo $SUDO_USER'
echo ""
read -p "Press enter to continue"
echo -e "\n"
echo "GET USER - SUDO"
echo ""
sudo whoami
sudo echo $USER
sudo id -u -n
sudo logname
sudo ps -o user= -p $$ | awk '{print $1}'
sudo sh -c 'echo $SUDO_UID'
sudo sh -c 'echo $SUDO_USER'
echo ""
read -p "Press enter to continue"
echo -e "\n"
echo "GET USER - SUDO SU -"
echo ""
sudo su -c 'whoami'
sudo su -c 'echo $USER'
sudo su -c 'id -u -n'
sudo su -c 'logname'
sudo su -c 'ps -o user= -p $$ | awk '"'"'{print $1}'"'"
sudo su -c 'sh -c '"'"'echo $SUDO_UID'"'"
sudo su -c 'sh -c '"'"'echo $SUDO_USER'"'"
echo -e "\n\n"
minha saída atualizada:
player1@Arcade:~/Desktop$ ./testuser.sh
GET USER - DIRECT
player1
player1
player1
player1
player1
Press enter to continue
GET USER - SUDO
[sudo] password for player1:
root
player1
root
player1
player1
1000
player1
Press enter to continue
GET USER - SUDO SU -
root
root
root
player1
root
1000
player1