- Rescheduled from “[2023-04-02 Sun]” on [2023-05-27 Sat 09:24]
The su
program lets you run a command and subsitute the user and group id.
With -c
you can run a command as another user.
[root@box ~] su -c "whoami" another-user
another-user
You can add arguments by tacking them on at the end. Make sure to use single quotes, '
, if you plan to refer arguments such as $1
, or else they will be expanded before the su
command is run.
[root@box ~] su -s /bin/zsh -c 'echo script $0, one $1, two $2' another-user name 1 2
script name, one 1, two 2
You can use -p
to preserve the environment for the current user.
[root@box ~] su -c "env | grep HOME" another-user
HOME=/home/another-user
[root@box ~] su -p -c "env | grep HOME" another-user
HOME=/root
With -l
it will start the shell as a login shell, clearing env-vars except for TERM
, initializing HOME
, SHELL
, USER
, LOGNAME
and PATH
. It will also move to the user’s home directory.
[root@box ~] su -c "pwd" another-user
/root
Like this
[root@box ~] su -l -c "pwd" another-user
/home/another-user
The shell can be specified with -s
.
[root@box ~] su -s /bin/zsh -c 'echo $SHELL' another-user
/bin/zsh