Mi chiedevo come eseguire un comando come un altro utente da uno script.
Ho il proprietario dello script impostato come root. Ho anche il seguente comando in esecuzione all'interno dello script per eseguire il comando come utente hudson:
su -c command hudson
È questa la sintassi corretta?
Risposta accettata:
Sì. Ecco il --help
:
$ su --help
Usage: su [options] [LOGIN]
Options:
-c, --command COMMAND pass COMMAND to the invoked shell
-h, --help display this help message and exit
-, -l, --login make the shell a login shell
-m, -p,
--preserve-environment do not reset environment variables, and
keep the same shell
-s, --shell SHELL use SHELL instead of the default in passwd
E alcuni test (ho usato sudo
poiché non conosco la password per nobody
conto)
$ sudo su -c whoami nobody
[sudo] password for oli:
nobody
Quando il tuo comando accetta argomenti, devi citarlo. Se non lo fai, accadranno cose strane. Eccomi —come root— che provo a creare una directory in /home/oli (as oli) senza citando il comando completo:
# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'
Si legge solo mkdir
come valore per -c
flag e sta tentando di utilizzare /home/oli/java
come nome utente. Se lo citiamo, funziona e basta:
# su -c "mkdir /home/oli/java" oli
# stat /home/oli/java
File: ‘/home/oli/java’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 811h/2065d Inode: 5817025 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ oli) Gid: ( 1000/ oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
Birth: -