Problema con uno script bash

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
scartozzo
Packager
Packager
Messaggi: 253
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Problema con uno script bash

Messaggio 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

Avatar utente
hashbang
Packager
Packager
Messaggi: 1985
Iscritto il: ven 4 giu 2010, 10:27
Nome Cognome: Luca De Pandis
Distribuzione: macOS | OpenBSD
Località: Lecce / Bergamo
Contatta:

Re: Bash scripting

Messaggio da hashbang »

beh alla fine dello script puoi mettere un

Codice: Seleziona tutto

if [ `whoami` = root ]; then
    su - <tuo_nome_utente>
fi
k8s | rook | flatcar | cert-manager | calico

Codice: Seleziona tutto

host$ kubectl get packager/hashbang -n slacky -o yaml

Avatar utente
scartozzo
Packager
Packager
Messaggi: 253
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Re: Problema con uno script bash

Messaggio 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
Ultima modifica di scartozzo il lun 27 set 2010, 0:34, modificato 1 volta in totale.

Avatar utente
scartozzo
Packager
Packager
Messaggi: 253
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Re: Problema con uno script bash

Messaggio 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.

Avatar utente
hashbang
Packager
Packager
Messaggi: 1985
Iscritto il: ven 4 giu 2010, 10:27
Nome Cognome: Luca De Pandis
Distribuzione: macOS | OpenBSD
Località: Lecce / Bergamo
Contatta:

Re: Problema con uno script bash

Messaggio 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?
k8s | rook | flatcar | cert-manager | calico

Codice: Seleziona tutto

host$ kubectl get packager/hashbang -n slacky -o yaml

Avatar utente
scartozzo
Packager
Packager
Messaggi: 253
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Re: Problema con uno script bash

Messaggio da scartozzo »

Codice: Seleziona tutto

if [ `whoami` = utente ]; then
    su - 
fi
ed ho passato il controllo a root

Avatar utente
hashbang
Packager
Packager
Messaggi: 1985
Iscritto il: ven 4 giu 2010, 10:27
Nome Cognome: Luca De Pandis
Distribuzione: macOS | OpenBSD
Località: Lecce / Bergamo
Contatta:

Re: Problema con uno script bash

Messaggio 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
k8s | rook | flatcar | cert-manager | calico

Codice: Seleziona tutto

host$ kubectl get packager/hashbang -n slacky -o yaml

Avatar utente
hashbang
Packager
Packager
Messaggi: 1985
Iscritto il: ven 4 giu 2010, 10:27
Nome Cognome: Luca De Pandis
Distribuzione: macOS | OpenBSD
Località: Lecce / Bergamo
Contatta:

Re: Problema con uno script bash

Messaggio 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 -
k8s | rook | flatcar | cert-manager | calico

Codice: Seleziona tutto

host$ kubectl get packager/hashbang -n slacky -o yaml

Avatar utente
scartozzo
Packager
Packager
Messaggi: 253
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Re: Problema con uno script bash

Messaggio 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.

Avatar utente
hashbang
Packager
Packager
Messaggi: 1985
Iscritto il: ven 4 giu 2010, 10:27
Nome Cognome: Luca De Pandis
Distribuzione: macOS | OpenBSD
Località: Lecce / Bergamo
Contatta:

Re: Problema con uno script bash

Messaggio 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...
k8s | rook | flatcar | cert-manager | calico

Codice: Seleziona tutto

host$ kubectl get packager/hashbang -n slacky -o yaml

Avatar utente
scartozzo
Packager
Packager
Messaggi: 253
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Re: Problema con uno script bash

Messaggio 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)

Avatar utente
scartozzo
Packager
Packager
Messaggi: 253
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Re: Problema con uno script bash

Messaggio da scartozzo »

Richiamo il comando su con uno script a parte ed ho risolto

Grazie

Avatar utente
hashbang
Packager
Packager
Messaggi: 1985
Iscritto il: ven 4 giu 2010, 10:27
Nome Cognome: Luca De Pandis
Distribuzione: macOS | OpenBSD
Località: Lecce / Bergamo
Contatta:

Re: Problema con uno script bash

Messaggio 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
k8s | rook | flatcar | cert-manager | calico

Codice: Seleziona tutto

host$ kubectl get packager/hashbang -n slacky -o yaml

Avatar utente
scartozzo
Packager
Packager
Messaggi: 253
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Re: Problema con uno script bash

Messaggio 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".

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6556
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Problema con uno script bash

Messaggio 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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Rispondi