Подтвердить что ты не робот

Подробный вывод оболочки script

У меня очень простая оболочка 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  

В принципе, я хочу запустить приложение со всеми разными значениями приоритета между -20 и 19. Однако при выполнении этого script он выглядит следующим образом:

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

Но мне нужен какой-то подробный вывод, который также печатает команду на терминале, чтобы она выглядела как

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  

Есть ли способ сделать это? Спасибо!

4b9b3361

Ответ 1

Вы не говорите, какую оболочку вы используете. Если вы используете sh/bash, попробуйте

sh -x script_name

запустить ваш скрипт в режиме подробного/отладочного. Это выведет на экран все команды, которые вы выполняете, значения переменных и т.д. Вы не хотите делать это обычно, так как это даст тонну выходных данных, но полезно выяснить, что происходит.

Как отмечено в комментариях, вы можете добавить этот флаг к вашему вызову #!/bin/bash в вашем скрипте.

Ответ 2

простой способ:

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

Ответ 3

Они продемонстрируют "eval" и "set", чтобы делать то, что вы хотите:

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

Ответ 4

let I=-20
while [ $I -lt 20 ]; do
  echo "Nice value is $I"
  nice -n $I ./app1
  let I=$I+1
done