我myscript.sh
在根 crontab 中运行计划,我需要它来检测非根用户(系统启动时使用的用户)。
我尝试过这些变体:
local_user=${who -m | awk '{print $1;}'}
local_user=${logname 2>/dev/null || echo $SUDO_USER}
local_user=$(logname)
local_user=$(ps -o user= -p $$)
local_user=${SUDO_UID:-$(id -u)}
local_user=$(id -u $(logname))
if [ "$EUID" -eq 0 ]; then
local_user=$SUDO_USER
else
local_user=$(whoami)
fi
# or
if [ -n "$SUDO_USER" ]; then
local_user="$SUDO_USER"
else
local_user="$(whoami)"
fi
唯一有效的是:
local_user=${SUDO_USER:-$(whoami)}
local_user=${SUDO_USER:-$USER}
但只有当我使用 sudo 或从 root 帐户手动运行脚本时它们才起作用,但它在 crontab root 中不起作用。
例子:
#!/bin/bash
local_user=${SUDO_USER:-$(whoami)}
echo "my user is $local_user" | tee /var/log/syslog
# run crontab
*/1 * * * * /home/user/test/test.sh
my user is root
# run manual
root@foo:/home/user/test# ./test.sh
my user is user
任何想法?
发布:ubuntu 22.04
更新:已解决!
我在这里找到:https ://unix.stackexchange.com/a/617686/266428
local_user=$(ps -eo user,uid | awk 'NR>1 && $2 >= 1000 && ++seen[$2]==1{print $1}')
或者
local_user=$(who | head -1 | awk '{print $1;}')