2009-06-05 21 views
18

Ho una molto semplice script di shell che appare come segue:Output dettagliato di script

clear 

for i in -20 -19 -18 -17 -16 -15 -14 ... 18 19 
do 
echo "Nice value is $i" 
nice -n $i ./app1 
done 

Fondamentalmente, voglio eseguire un'applicazione con tutti i diversi valori di priorità tra -20 e 19. Tuttavia, quando si esegue questo script appare come segue:

Nice value is -20 
15916233 
Nice value is -19 
5782142 
.... 
Nice value is 19 
5731287 

Ma vorrei un qualche tipo di output dettagliato, che è anche la stampa il comando sul terminale in modo che assomiglia a questo

Nice value is -20 
nice -n -20 ./app1  
15916233 
Nice value is -19 
nice -n -19 ./app1 
5782142 
.... 
Nice value is 19 
nice -n 19 ./app1 
5731287 

C'è un modo per farlo? Grazie!

risposta

43

Non si dice che tipo di shell stai utilizzando. Se stai usando sh/bash, provare

sh -x script_name

per eseguire lo script in una modalità dettagliata/debug. Questo scaricherà tutti i comandi che esegui, i valori delle variabili, ecc. Non vuoi farlo normalmente dato che fornirà un sacco di output, ma è utile capire cosa sta succedendo.

+12

Si dovrebbe anche essere in grado di fare questo accadere per ogni corsa mettendo il -x nel #! linea; vale a dire la prima riga della sceneggiatura sarebbe: #!/bin/bash -x – PTBNL

+0

che sembra buono e fa esattamente quello che voglio. Grazie! –

3

un modo semplice:

for i in -20 -19 -18 -17 -16 -15 -14 ... 18 19 
do 
    echo "Nice value is $i" 
    echo "nice -n $i ./app1" 
    nice -n $i ./app1 
done 
0
let I=-20 
while [ $I -lt 20 ]; do 
    echo "Nice value is $I" 
    nice -n $I ./app1 
    let I=$I+1 
done 
+0

Sto usando bash, quando si cerca di eseguire il codice ottengo il seguente errore: [: -lt: operatore unario previsto –

+0

Questo qui sembra di fare la roba chiaro per ((i = -20; i <= 19; i ++)) do echo "Welcome $ i times" nice -n $ i ./app1 done –

+0

scusate, mischiate le lettere maiuscole e minuscole (digitando rapidamente). Dovrebbero essere tutti uguali, naturalmente. Modificato per risolvere. –

1

Questi dimostreranno 'eval' e 'set' di fare ciò che si vuole:

:::::::::::::: 
a.sh 
:::::::::::::: 
#!/bin/sh 

clear 

i=-20 
while [ ${i} -lt 20 ]; do 
    echo "Nice value is $i" 
    cmd="nice -n $i ./app1" 
    echo ${cmd} 
    eval ${cmd} 
    i=`expr ${i} + 1` 
done 

:::::::::::::: 
b.sh 
:::::::::::::: 
#!/bin/sh 

clear 

i=-20 
while [ ${i} -lt 20 ]; do 
    echo "Nice value is $i" 
    set -x 
    nice -n $i ./app1 
    set +x 
    i=`expr ${i} + 1` 
done 
Problemi correlati