Как использовать таймер в ударе?

Для интерактивного использования можно использовать alsamixer. Для сценариев (например, привязка к сочетаниям клавиш) смотрят на amixer.

alsamixer включен по умолчанию в большинстве систем.


Установить использование общей громкости:

# Gets a list of simple mixer controls
$ amixer scontrols 

Затем установите его на желаемый объем как пример

$ amixer sset 'Master' 50%
31
24.11.2018, 21:41
6 ответов

Если Вы хотите продолжительность в секундах при главном использовании

start=$SECONDS

и в конце

duration=$(( SECONDS - start ))
30
27.01.2020, 19:37

Вы могли использовать встроенный Linux time команда. Из страницы справочника:

КОМАНДА времени [аргументы]

время определяет который информация отобразиться о ресурсах, используемых КОМАНДОЙ от формата строки. Если никакой формат не указан на командной строке, но переменная среды ВРЕМЕНИ установлена, ее значение используется в качестве формата.

Ко времени cleanup.sh сценарий, используйте:

$ time cleanup.sh
23
27.01.2020, 19:37

Я понимаю, что это довольно старый вопрос, но я делаю это так, когда мне нужно/нужно знать, сколько времени потребовалось для выполнения чего-либо.

Bash имеет встроенный таймер секунд в виде внутренней переменной с именем SECONDS(см.: здесь для других внутренних переменных)

Поместите SECONDS= 0 до того, что вы проверяете время выполнения. Это должно быть после любого пользовательского ввода, чтобы получить хороший результат, поэтому, если вы запрашиваете информацию, поместите ее после подсказки (подсказок).

Затем поместите это в конец того, что вы проверяете:

if (( $SECONDS > 3600 )) ; then
    let "hours=SECONDS/3600"
    let "minutes=(SECONDS%3600)/60"
    let "seconds=(SECONDS%3600)%60"
    echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" 
elif (( $SECONDS > 60 )) ; then
    let "minutes=(SECONDS%3600)/60"
    let "seconds=(SECONDS%3600)%60"
    echo "Completed in $minutes minute(s) and $seconds second(s)"
else
    echo "Completed in $SECONDS seconds"
fi

Если вы хотите знать только время в секундах, вы можете упростить вышеизложенное до:

echo "Completed in $SECONDS seconds"

В качестве примера:

read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
    let "hours=SECONDS/3600"
    let "minutes=(SECONDS%3600)/60"
    let "seconds=(SECONDS%3600)%60"
    echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" 
elif (( $SECONDS > 60 )) ; then
    let "minutes=(SECONDS%3600)/60"
    let "seconds=(SECONDS%3600)%60"
    echo "Completed in $minutes minute(s) and $seconds second(s)"
else
    echo "Completed in $SECONDS seconds"
fi
15
27.01.2020, 19:37
#!/bin/bash

start=$(date +%s)
#
# do something
sleep 10
#
#
end=$(date +%s)

seconds=$(echo "$end - $start" | bc)
echo $seconds' sec'

echo 'Formatted:'
awk -v t=$seconds 'BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
5
27.01.2020, 19:37

@anask предлагает умное решение для этого ответа, просто я рекомендую использовать родной $SECONDSвместо того, чтобы создать новый

awk -v t=$SECONDS 'BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'

Целью printfи деления является преобразование истекших секунд в соответствующие единицы часов, минут, секунд, соответственно.

0
27.01.2020, 19:37

Недавно я пытался сделать что-то подобное. Я бы предложил:

date1=$(date +%s)

#Use this arithmetic to determine elapsed time since defining date1
$(( $(date +%s) - $date1 ))

#While loop using timer
while ! [ $(( $(date +%s) - $date1 )) -gt 10 ]; do
    #Terminal timer -n won't append new line, so the echo will replace itself. 
    ##There is also some date formatting to achieve: HH:MM:SS.
    echo -ne "$(date -u --date @$(( $(date +%s) - $date1 )) +%H:%M:%S)\r"
done
0
27.01.2020, 19:37

Теги

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