Существуют такие службы, как rpmfind (для пакетов RPM), а Debian (с их политикой упаковки всего, что компилируется) является собственным индексом. Для других систем, таких как меньшие дистрибутивы Linux или BSD, вам нужно будет посмотреть на них специально (и пакеты в любом случае не переносимы между ними).
Большинство крупных проектов будут иметь пакеты, указатели на пакеты или, по крайней мере, подробные инструкции по сборке. Если пакет неясен, лучше держитесь подальше, если только в этом нет острой необходимости или вы не очень хорошо осведомлены (то есть не являетесь частью его команды разработчиков).
Давненько я не сталкивался с такого рода задачами, но помню, что-то подобное работало:
#!/bin/bash
trap break INT
for (( c=0; c<=$1; c++ ))
do
# SOME STUFF HERE
# data gathering into arrays and other commands here etc
echo loop "$c" before sleep
# sleep potentially for a long time
sleep "$2"
echo loop "$c" after sleep
done
#WRITE REPORT OUT TO SCREEN AND FILE HERE
echo outside
Идея состоит в том, чтобы использовать Ctrl-C , чтобы разорвать цикл. Этот сигнал (SIGINT )перехватывается ловушкой, которая разрывает цикл и позволяет остальной части сценария следовать за ним.
Пример:
$./s 3 1
loop 0 before sleep
loop 0 after sleep
loop 1 before sleep
^Coutside
Дайте мне знать, если у вас возникнут проблемы с этим.
В некоторых случаях лучше иметь решение, которое не прерывает "SOME STUFF HERE" и прерывает работу только во время ожидания сценария оболочки.
Затем вы можете использовать оболочку, созданную -в команде read
с некоторыми параметрами вместо sleep
.
Попробуйте этот скрипт,
#!/bin/bash
echo "Press 'q' to quit the loop and write the report"
echo "Press 'Enter' to hurry up (skip waiting this time)"
for (( c=0; c<=$1; c++ ))
do
echo "SOME STUFF HERE (pretending to work for 5 seconds)..."
sleep 5
echo "Done some stuff"
# data gathering into arrays and other commands here etc
# sleep potentially for a long time
#sleep $2
read -n1 -st$2 ans
if [ "$ans" == "q" ]
then
break
elif [ "$ans" != "" ]
then
read -n1 -st$2 ans
fi
done
echo "WRITE REPORT OUT TO SCREEN AND FILE HERE"
Подробную информацию о read
вы найдете с помощью команды help read
,
-n nchars return after reading NCHARS characters rather than waiting
for a newline, but honor a delimiter if fewer than
NCHARS characters are read before the delimiter
-s do not echo input coming from a terminal
-t timeout time out and return failure if a complete line of
input is not read within TIMEOUT seconds. The value of the
TMOUT variable is the default timeout. TIMEOUT may be a
fractional number. If TIMEOUT is 0, read returns
immediately, without trying to read any data, returning
success only if input is available on the specified
file descriptor. The exit status is greater than 128
if the timeout is exceeded