2009-06-05 11 views
18

Tengo un script muy simple que se ve de la siguiente manera:Salida detallada de la secuencia de comandos 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 

Básicamente, quiero correr una aplicación con todos los valores de prioridad diferentes entre -20 y 19. Sin embargo, al ejecutar este script se ve de la siguiente manera:

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

Pero me gustaría algún tipo de salida detallada, que también se está imprimiendo el comando en el terminal para que se vea como esto

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 

¿Hay alguna manera de hacerlo? ¡Gracias!

Respuesta

43

No dices qué tipo de shell estás ejecutando. Si está utilizando sh/bash, pruebe

sh -x script_name

para ejecutar la secuencia de comandos en un modo detallado/depuración. Esto eliminará todos los comandos que ejecute, los valores de las variables, etc. No desea hacer esto normalmente, ya que proporcionará una gran cantidad de resultados, pero es útil para resolver lo que está sucediendo.

+12

También debe ser capaz de hacer que esto suceda para cada corrida poniendo el -x en el #! línea; es decir, la primera línea del script sería: #!/bin/bash -x – PTBNL

+0

que se ve bien y hace exactamente lo que yo quiero. ¡Gracias! –

3

una manera fácil:

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

estoy usando bash, al intentar ejecutar el código me sale el siguiente error: [: -lt: operador unario espera –

+0

Esta aquí parece hacer las cosas clara de ((i = -20; i <= 19; i ++)) do eco "Bienvenida $ i veces" nice -n $ i ./app1 hecho –

+0

lo siento, mezclé el I superior y el minúsculo (tipeo rápido). Todos deberían ser iguales por supuesto. Editado para corregir –

1

Estos demostrarán 'eval' y 'set' para hacer lo que desee:

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