Pagina 1 di 2
Problema con uno script bash
Inviato: lun 27 set 2010, 0:05
da scartozzo
Ho script bash che installa un programma. Accedo con un altro utente e lo eseguo.
Alla fine dell'esecuzione dello script vorrei anche fare in modo che il controllo ritorni al prmo utente con il quale mi sono loggato.
Mi spiego: da linea di comando risolvo in un attimo con
D'altronde inserendo alla fine dello script exit, questo non sortisce l'effetto voluto.
Come posso risolvere?
Grazie
Re: Bash scripting
Inviato: lun 27 set 2010, 0:25
da hashbang
beh alla fine dello script puoi mettere un
Codice: Seleziona tutto
if [ `whoami` = root ]; then
su - <tuo_nome_utente>
fi
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 0:29
da scartozzo
Ti ringrazio per il suggerimento.
Devo restituire il controllo all'utente root ed il comando su all'interno delle script non mi funziona
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 0:33
da scartozzo
Ho fatto il contrario e funziona.
Ora mi rimane una questione: come mai il comando su funziona all'interno di un if e non da solo?
Comunque grazie.
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 0:35
da hashbang
in che senso hai fatto il contrario?
quale su hai messo sotto condizione? il primo, per diventare root, o il secondo, per tornare utente normale?
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 0:36
da scartozzo
Codice: Seleziona tutto
if [ `whoami` = utente ]; then
su -
fi
ed ho passato il controllo a root
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 0:39
da hashbang
Però poi il resto dello script non esce. o sbaglio?
Comunque ecco un mini script. Dovrebbe essere questo ciò che vuoi realizzare giusto?
Parti con un su e poi pluto.sh
Codice: Seleziona tutto
#!/bin/sh
echo "CIAO"
echo "QUESTA È"
echo "UNA PROVA"
if [ `whoami` = root ]; then
su - pippo
fi
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 0:41
da hashbang
scartozzo ha scritto:if [ `whoami` = utente ]; then
su -
fi
ed ho passato il controllo a root
meglio mettere
In questo modo metti in condizione che qualsiasi utente non-root debba passare per su -
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 0:42
da scartozzo
Alla fine dello script vorrei che lo script si concludesse e che il controllo passasse dall'utente che ho utilizzato all'utente root.
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 0:49
da hashbang
Ah ecco...avevo capito l'opposto. Ma c'è comunque il problema che se fai partire lo script con un su - tutto ciò che c'è dopo non si vede
o lo fai partire da root o non saprei...
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 1:01
da scartozzo
La prosecuzione della compilazione avviene con un altro script lanciato dall'utente root. Comunque rimane il problema che lo script precedente non termina.
Mi spiego meglio. Ho enne script che vengono lanciati da un'altro script. Una parte devono essere eseguiti dall'utente pippo, che poi non serve più, e la seconda parte dall'utente root.
Rimane comunque appeso l'ultimo script (che passa il controllo a root)
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 1:05
da scartozzo
Richiamo il comando su con uno script a parte ed ho risolto
Grazie
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 1:12
da hashbang
Aspetta che forse ho una soluzione, ma prima devo chiarire un'ultima cosa. Per appeso intendi quello che ti dissi prima a proposito del passaggio a root? (non si vede l'output).
Perchè se così fosse potresti mettere l'exec dei vari script in su -c
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 1:22
da scartozzo
Mi loggo al sistema come flavio, poi lancio un su (e divento root), successivamente rilancio su per l'utente pippo e poi ridivento root con il suggerimento che mi hai passato. Mi sembrava molto macchinoso comunque funziona.
Vedo tranquillamente l'output.
Tieni da conto che non sono espertissimo in bash scripting.
Non so cosa voglia dire "mettere l'exec dei vari script in su -c".
Re: Problema con uno script bash
Inviato: lun 27 set 2010, 5:07
da targzeta
L'opzione '-c' del comando 'su' ti permette di eseguire solo un comando come un utente diverso. Questo dovrebbe essere proprio quello che cerchi tu. Ad esempio (#=root):
Codice: Seleziona tutto
#> ls ~
file_di_root
#> su spina -c 'ls ~'; ls ~
file_di_spina
file_di_root
Come vedi, il primo comando ('ls ~') viene eseguito nella home directory dell'utente root, che contiene il solo file 'file_di_root'. Il secondo comando esegue 'ls ~' come utente 'spina' e subito dopo di nuovo il comando 'ls ~' come utente root, quindi fa un 'ls' sia nella home directory di spina (file_di_spina) che nella home di root (file_di_root).
Morale della favola, se vuoi eseguire solo un insieme di comandi come un determinato utente e non vuoi 'diventare' quell'utente, il parametro '-c' del comando 'su' è quello che fa per te. Per maggiori info:
Emanuele