Esegui una shell all'interno di sudo
:sudo bash -c 'whoami; whoami'
Puoi usare qualsiasi carattere tranne '
stessa all'interno delle virgolette singole. Se vuoi davvero avere una singola virgoletta in quel comando, usa '\''
(che tecnicamente è:end single-virgoletta letterale, letterale '
carattere, inizio letterale tra virgolette singole; ma effettivamente questo è un modo per inserire un apice singolo in una stringa letterale a apice singolo).
Puoi passare i comandi come input standard in sudo'ed bash con un here document:
sudo bash <<"EOF"
whoami
id
EOF
In questo modo non c'è bisogno di giocherellare con la citazione corretta, specialmente se hai più livelli, ad esempio:
sudo bash <<"EOF"
whoami
echo $USER ~
sudo -u apache bash <<"DOF"
whoami
echo $USER ~
DOF
EOF
Produce:
root
root /root
apache
apache /usr/share/httpd
(Nota che non puoi indentare il terminatore interno — deve essere solo sulla sua riga. Se vuoi usare l'indentazione in un here document, puoi usare <<-
invece di <<
, ma devi rientrare con le tabulazioni, non con gli spazi.)
per esempio prova questo, l'ho provato:
sudo bash -c "cd /;ls;ls|grep o"
In questo esempio devi prima cambiare dir in /root, quindi elencare la directory root e infine per la directory root filtrare solo le directory con nome con la lettera 'o'.
Ma la cosa migliore è scrivere uno script che faccia tutto ciò di cui hai bisogno e fornisca il codice di uscita per tutte le azioni complesse. Quindi puoi sudo script invece di un gruppo di singoli comandi come nell'esempio sopra.