2009-06-05 9 views
18

J'ai un script shell très simple qui se présente comme suit:sortie verbeuse de script shell

clear 

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

Fondamentalement, je veux lancer une application avec toutes les différentes valeurs de priorité entre -20 et 19. Toutefois, lors de l'exécution ce script, il se présente comme suit:

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

Mais je voudrais une sorte de sortie prolixe, qui imprime également la commande sur le terminal afin qu'il ressemble à ce

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 

Existe-t-il un moyen de faire cela? Je vous remercie!

Répondre

43

Vous ne dites pas quel type de shell vous utilisez. Si vous utilisez sh/bash, essayez

sh -x script_name

pour exécuter votre script en mode verbose/debug. Cela supprimera toutes les commandes que vous exécutez, les valeurs variables, etc. Vous ne voulez pas faire cela normalement, car cela fournira beaucoup de sortie, mais c'est utile pour savoir ce qui se passe.

+12

Vous devez également être en mesure de ce faire pour chaque course en mettant le -x dans le #! ligne; c'est-à-dire la première ligne du script serait: #!/bin/bash -x – PTBNL

+0

qui a l'air bien et fait exactement ce que je veux. Merci! –

3

un moyen facile:

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

J'utilise bash, lorsque vous essayez d'exécuter votre code, je reçois l'erreur suivante: [: -lt opérateur unaire attendu –

+0

Ce ici semble faire les choses claires pour ((i = -20; i <= 19; i ++)) faire echo "Bienvenue $ i fois" nice -n $ i ./app1 fait –

+0

désolé, mélangé les I majuscules et minuscules (frappe rapide). Ils devraient tous être les mêmes bien sûr. Edité pour réparer. –

1

Ces démontreront 'eval' et 'set' pour faire ce que vous voulez:

:::::::::::::: 
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