Скрипт подстановки справки Bash

Есть ли способ, чтобы мне не приходилось вручную изменять maxruntime?

Так что --timeout "time" = maxruntime

SCRIPTS="/home/andy/bin/CPU_Stress_Test.txt"

command="/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 15s"
maxruntime=15s

rm $SCRIPTS
echo $command

$command >/dev/null 2>/dev/null &
watchpid=$!
date +"%Y-%m-%d-%H:%M:%S" >> $SCRIPTS
sensors -f | grep "temp4" >> $SCRIPTS
sensors -f | grep "fan1" >>  $SCRIPTS

/bin/sleep "$maxruntime"

if [ -d "/proc/$watchpid" ]
then
        echo "Max runtime exceeded, killing PID $watchpid"

        if /bin/kill -9 "$watchpid" >/dev/null 2>/dev/null
        then
                echo "Killed."
                exit 0
        else
                echo "Could not kill, please investigate manually."
                exit 1
        fi
fi
date +"%Y-%m-%d-%H:%M:%S" >> $SCRIPTS
sensors -f | grep "temp4" >> $SCRIPTS
sensors -f | grep "fan1" >>  $SCRIPTS
0
задан 1 September 2018 в 19:32

2 ответа

Некоторые примечания по Вашему коду:

  • , когда Вы хотите сохранить команду в переменной, используйте массив (см.: я пытаюсь поместить команду в переменную, но сложные случаи всегда перестали работать! )

    command=(/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout "$maxruntime")
    # then execute it like
    "${command[@]}"         # with the quotes!
    
  • всегда заключают Ваши переменные в кавычки, если Вы не знаете точно, почему Вы хотите их, закрыл кавычки (см.: последствия безопасности упущения заключить переменную в кавычки в оболочках удара/POSIX )

  • у Вас есть некоторый дублированный код, так используйте функцию:

    get_sensor_info() {
        date +"%Y-%m-%d-%H:%M:%S"
    
        # if you don't care about order of "temp4" or "fan1"
        sensors -f | grep -E 'temp4|fan1'
    
        # or if you do care about the order, then you still only need to call sensors once
        sensor_info=$(sensors -f)
        echo "$sensor_info" | grep temp4
        echo "$sensor_info" | grep fan1
    }
    
    get_sensor_info >> "$stress_log"
    
  • не используют имена переменной ALLCAPS, оставляют имена переменной для оболочки. Однажды Вы запишете PATH=xyz и затем зададитесь вопросом, почему Ваш сценарий повреждается.

  • Вы не должны повторять себя с >/dev/null 2>/dev/null-> >/dev/null 2>& или определенное для удара &>/dev/null

  • использование https://www.shellcheck.net для проверения кода на наличие ошибок.
0
ответ дан 13 April 2019 в 22:14

Просто переключите порядок присвоений для command и maxruntime и замените им в command.

maxruntime="15s"
command="/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout ${maxruntime}"
0
ответ дан 13 April 2019 в 22:14

Другие вопросы по тегам:

Похожие вопросы: