Come scambiare / chage l'ID utente con uno script bash per eseguire comandi nello stesso script?


12

Esiste un modo per cambiare l'identità dell'utente all'interno di uno script (eseguito come root come parte di un processo di installazione) per eseguire alcuni comandi senza chiamare uno script esterno, per poi tornare roota eseguire altri comandi?

Una specie di:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...


Dovresti dare un'occhiata a questa risposta stackoverflow.com/a/17758312/1243547
Klaus

Risposte:


27

No. Ma puoi usare sudoper eseguire una shell e usare un heredoc per alimentare i suoi comandi.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami

Questo sicuramente fa il lavoro nel tenere insieme le cose nello stesso script e può anche usare la sostituzione dei comandi se tutto è avvolto con la parentesi di chiusura una riga dopo EOF
a1an

Questa risposta è migliore di tutte le risposte nella domanda che questa duplica .
Dan Dascalescu,

1
Mi chiedo quasi, se dovessi farlo, non userei EOF, e cambierei invece il nome dell'eredità in SUDO. In questo modo vorrei ricordare che sto correndo come superutente all'interno del codice contenente.
Joe Heyming,

Per qualche motivo, sembra che impostando var nel comando ereditario, i var non siano impostati. Se provo BLA="something"e poi ad es .: echo "In: $BLA"sembra che BLA sia vuoto
Efren,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.