Newsgroup: it.comp.os.linux.iniziare
Titolo: Più comandi "sudati" sulla stessa linea.

Forse sarà una domanda stupida, ma oggi proprio non ci arrivo.
 
sudo whoami;whoami
 
Questo risponde con:
root
mioutente
 
 
Vorrei sapere se c'è una soluzione che risponda con
root
root
 
Naturalmente senza ripetere il sudo per tutti i comandi (o senza creare 
uno script e lanciarlo in sudo).
 
sudo whoami;sudo whoami
 
Fa quello che voglio, ma non va bene perché QUANDO il primo comando 
supera il timeout del sudo IL SECONDO comando chiede nuovamente la password.
 
Un esempio di comando vero potrebbe essere questo che però contiene 2 
"sudo" distini.
 
Cambiare permessi a file 664 e directory 775
 
PDIR=$"775";PFILE="664";UTENTE="shared";GRUPPO="shared";BASEDIR="/mio/disco/shared/"; 
sudo find $BASEDIR -type d -exec chmod $PDIR '{}' ';' ; sudo find 
$BASEDIR -type f -exec chmod $PFILE '{}' ';' ; sudo chown -R $UTENTE 
$BASEDIR; sudo chgrp -R $GRUPPO $BASEDIR
 
Questa a seconda dei casi potrebbe impiegare più di 5 minuti (timeout di 
default di sudo).
 
Ok, lo so che questa è tanto lunga che meriterebbe di essere messa un 
uno script.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 Vorrei sapere se c'è una soluzione che risponda con root root
 
Molto banalmente:
 
$ sudo bash -c "whoami;whoami"
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
_________________________________________________________________
Non sprecare i cicli idle della tua CPU, né quelli della tua GPU.
 
http://www.worldcommunitygrid.org/index.jsp
 
http://www.rnaworld.de/rnaworld/
 
http://home.edges-grid.eu/home/
 
 
http://www.gpugrid.net/
 

 uno script.
 
Appunto.
 
Comunque, potrei sospettare che un "sudo -s"
sia di aiuto.
Non ho provato, ma qualcosa come:
 
echo "comando1; comando2; ..." | sudo -s
 
Potrebbe anche funzionare, stando molto attenti
alle varie espansioni della shell.
 
bye,
 
-- 
 
piergiorgio

 $ sudo bash -c "whoami;whoami"
 
Non ho sudo, con time mi prende questa ma non la tua:
$: time ( whoami; whoami )
yoda
yoda
 
real	0m0.002s
user	0m0.000s
sys	0m0.000s
 
-- 
Tanti saluti
 

 real	0m0.002s user	0m0.000s sys	0m0.000s
 
Occhio, qui tu hai usato il time interno alla bash.
Invece:
 
$ /usr/bin/time ( whoami ; whoami )
bash: errore di sintassi vicino al token non atteso "whoami"
 
Il motivo per cui col time interno la tua sintassi funziona,
e con quello esterno no, è - credo - che il time interno
piglia come argomento una *pipeline*, mentre il time esterno,
come anche sudo, piglia un (proprio *un* solo) *comando*.
 
La mia sintassi funziona anche col time esterno:
 
$ /usr/bin/time bash -c "whoami;whoami"
lem
lem
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 5536maxresident)k
0inputs+0outputs (0major+1062minor)pagefaults 0swaps



No, sudo quella non la mangia. nemmeno con le graffe.
 
 
 

 La mia sintassi funziona anche col time esterno:
 
E, almeno a me, anche con quello interno:
 
$time bash -c "whoami;whoami"
lem
lem
 
real	0m0.004s
user	0m0.000s
sys	0m0.000s


 Davvero strano! Sei proprio sicuro?
 
Scusa ho letto come se -c fosse un'opzione per sudo, invece ora vedo che
e' per bash, non la conoscevo se no non avrei letto male.
Il resto che mi dici tutto OK tutto uguali.
 
-- 
Tanti saluti
 

 alle varie espansioni della shell.
 
 
In effetti sembra funzionare. almeno nell'esempio semplice che ho 
provato (proprio per non incorrere in problemi di espansione della shell)
 
(echo whoami;echo sleep 2400;echo whoami)|sudo -s
 
Io credevo che non avrebbe funzionato (cioè, mi avrebbe richiesto 
nuovamente la password) perchè i sudo vengono lanciati 2 volte a 
distanza di un tempo superiore al timeout.
 
Però in effetti, diversamente da quanto credevo, ha funzionato.
 
Per le verità speravo in una sistema più intuitivo che facesse 
semplicemente uso di parentesi.
 
Ma non è poi così importante. Più che altro era una curiosità...
Diciamo la classica sfida a "Prova a farlo con un unica riga"
 
 
 
 

 Diciamo la classica sfida a "Prova a farlo con un unica riga"
 
La cosa piu` "sana" sarebbe farlo con uno
script separato, poi passato a "sudo".
 
Il vantaggio del pipe e` "tee", cioe`:
 
echo "comando1; comando2; ..." | tee logfile | sudo -s
 
In questo modo hai in "logfile" l'input di "sudo" e`
puo` fare debug o simili.
 
Il problema puo` essere l'espansione fatta dalla bash:
 
a=xxx
b=yyy
echo "$a $b" | qualcosa
 
Diventa:
 
echo xxx yyy | qualcosa
 
Le virgolette si perdono e` "qualcosa" vede 2 argomenti,
invece di uno solo.
Soluzione:
 
echo \""$a $b"\" | qualcosa
 
Il che puo` diventare criptico...
 
bye,
 
-- 
 
piergiorgio