2015-05-13 16 views

risposta

3

Dopo l'esecuzione sudo c'è una nuova shell e il resto dei "comandi", non sono parte di esso, ma parte della shell genitore. Si può fare:

sudo -u oracle -i bash -c "cd /lo2/ram/daska && ./script.sh" 

O direttamente,

sudo -u oracle -i /lo2/ram/daska/script.sh 
+0

quest'ultimo a seconda se lo script ha bisogno di questa particolare directory di lavoro o no ... – glglgl

+0

Sì, questo è un punto valido. –

4

Usa & & separatore

sudo -u oracle -i && cd /lo2/ram/daska && ./script.sh 
+1

ricordate che quando si usa '&&' se qualche comando nella catena fallisce, il resto non verrà eseguito – frost

+0

No, non funziona Ho provato con punto e virgola e simboli &, il suo solo primo comando in esecuzione ..per favore controlla di nuovo –

+1

Se tutti i comandi hanno successo, la sostituzione di ';' con '&&' non fa differenza. In ogni caso, questo non è il problema e non affronta la questione. –

3

È inoltre possibile utilizzare il punto e virgola per separare il vostro comando

sudo -u oracle -i ; cd /lo2/ram/daska ; ./script.sh 

La differenza tra l'utilizzo di & & e virgola è che se si vuoi eseguire ogni comando solo se quello precedente è valido eds, quindi è possibile utilizzare l'operatore & &. Tuttavia, se si desidera eseguire comandi, indipendentemente dal precedente eseguito o meno, è possibile utilizzare il punto e virgola (;) per separare i comandi.

+0

No, questo non funziona Ho provato con il punto e virgola e i simboli &, il suo solo primo comando in esecuzione .. ricontrolla –

+0

@Ramdas: - Hai visto la risposta data da glglgl 'sudo -u oracle sh -c 'cd/LO2/ram/daska; ./script.sh'' –

+0

Sì, ma il profilo dell'oracolo non sta arrivando quando utilizzo il comando precedente con -i .. ricevo errori che non riescono a trovare il comando sqlplus, Quando eseguo manualmente il comando funziona correttamente –

3

Aggiungo alle risposte di Piperoman e Rahul che con && il comando successivo viene eseguito solo se il primo succede e con il comando ; viene sempre eseguito.

Così

sudo -u oracle -i ; cd /lo2/ram/daska ; ./script.sh

se non si cura se tutto nelle esegue catena, e

sudo -u oracle -i && cd /lo2/ram/daska && ./script.sh

se lo fai.

3

Se fai

sudo -u oracle -i ; cd /lo2/ram/daska; ./script.sh 

dici che deve essere avviato shell di login in esecuzione sotto l'utente oracle. Succede e gli altri comandi vengono eseguiti dopo aver lasciato questa shell.

Questo non è probabilmente quello che volete.

vedo la seguente opzione:

sudo -u oracle sh -c 'cd /lo2/ram/daska; ./script.sh' 

, che in linea di principio menzionato nella pagina man di sudo.

Problemi correlati