Pagina 1 di 2

Problema con uno script bash

Inviato: lun set 27, 2010 0:05
da scartozzo
Ho script bash che installa un programma. Accedo con un altro utente e lo eseguo.

Codice: Seleziona tutto

su utente

Codice: Seleziona tutto

sh script

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

Codice: Seleziona tutto

exit

D'altronde inserendo alla fine dello script exit, questo non sortisce l'effetto voluto.
Come posso risolvere?
Grazie

Re: Bash scripting

Inviato: lun set 27, 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 set 27, 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 set 27, 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 set 27, 2010 0:35
da hashbang
in che senso hai fatto il contrario? :-k 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 set 27, 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 set 27, 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 set 27, 2010 0:41
da hashbang
scartozzo ha scritto:if [ `whoami` = utente ]; then
su -
fi
ed ho passato il controllo a root
meglio mettere

Codice: Seleziona tutto

if [ `whoami` != root ]; then
  su -
fi
In questo modo metti in condizione che qualsiasi utente non-root debba passare per su -

Re: Problema con uno script bash

Inviato: lun set 27, 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 set 27, 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 :-k o lo fai partire da root o non saprei...

Re: Problema con uno script bash

Inviato: lun set 27, 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 set 27, 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 set 27, 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 set 27, 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 set 27, 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:

Codice: Seleziona tutto

$> man su

Emanuele