已解决,已添加更新脚本- 感谢 @steeldriver 和 @user10489
Shell 打印输出混乱并且缺少一些信息。
我对 Linux 还很陌生,还处于复制/粘贴并查看结果的阶段。
我已经尝试过谷歌搜索,但无济于事。
我正在运行一个脚本,它采用多种方式返回当前用户。
该脚本使用
- 直接呼叫
- 使用调用
sudo
- 使用调用
sudo su -
每个方法都应该返回 7 个值,但第一个和第二个方法返回 5 个值,第三个方法返回全部 7 个值。
有问题的脚本:
#!/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"
我得到的输出:
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
我在这里遗漏了什么?我的假设是直接调用$SUDO_UID
和与$SUDO_USER
权限有关。但是打印输出的顺序仍然让我感到困惑。
编辑:
理解用法sh -c
、正确引用和访问 $SUDO_xxxxx 变量就成功了。
另外,我无法正确计数。该脚本旨在返回 7 个值,而不是 6 个。
更新后的脚本现在运行正常。
感谢你们的帮助!
我更新的脚本:
#!/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"
我的更新输出:
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