"Теперь мне интересно, есть ли способ проверить, переходит ли программа в бесконечный цикл, прежде чем все входные данные будут считаны. Например, если программа переходит в бесконечный цикл, это единственный способ остановить программу "
Мы знаем ответ на этот вопрос в течение почти восьмидесяти лет . Ответ - нет, нет пути.
Спасибо, что дали вопрос, который даже не был близок к вашему фактическому вопросу:
"Я пытаюсь оценить результаты ученичества. Я просто хочу создать сценарий, чтобы использовать его в будущем. Сейчас у меня достаточно хорошо работает с помощью таймера сна, но я хочу сделать сценарий более надежным без таймера "
Простое решение:
# how many seconds of CPU (not wall clock) # should the student's program get? # 10 seconds is generous for an intro class # 60 seconds of CPU would be obscene $ ulimit -t 10 $ run_student_program # but since I don't have a student program $ time dd if=/dev/zero of=/dev/null Killed real 0m9.998s user 0m3.080s sys 0m6.912s
-121--290947-
Это пакетные сценарии - как в MS Windows Batch. FINDSTR был представлен в комплекте ресурсов Windows NT 4.
::
иrem
являются комментариями. (Или::
на самом деле является меткой с недопустимым именем ).Вероятно, вы могли бы запустить их под
wine
cmd
, но лучше бы портировать их на какой-нибудь родной сценарий (perl, python, bash и т. д.).Простой пример:
#!/bin/bash # Function to print usage and exit usage() { printf "Usage: %s [repository] [transaction_id]\n" $(basename "$1") >&2 exit 1 } # Check that we have at least 2 arguments [ $# -ge 2 ] || usage repo="$2" trans_id="$2" # Check that command succeed, and set variable "msg" to output if ! msg="$(svnlook log "$repo" -t "$trans_id")"; then printf "Check path and id.\n" >&2 usage fi # If msg is empty if [ "$msg" = "" ]; then printf \ "Your commit has been blocked because you didn't give any log message Please write a log message describing the purpose of your changes and then try committing again. -- Thank you.\n" >&2 exit 2 fi # Else default exit AKA 0
-121--290943-
Как вы отметили, повторный вызов
firefox
просто попросит запущенный экземпляр открыть другое окно. Для запрета такого поведения можно использовать переключатель-no-remote
.Нечто подобное происходит с
nautilus
: он используется для отображения окна рабочего стола (со значками), поэтому он уже запущен при его запуске.
Si desea el promedio de todos los números en todas las columnas, esto es simple
awk ' { for (i=1;i<=NF ;i++){ sum+=$i;num++} }
END{ print(sum/num) } ' infile
Si desea el promedio por columna, solo mantenga un registro del número máximo de columnas:
awk ' {for (i=1;i<=NF ;i++){ if(maxF<NF){maxF=NF};sum[i]+=$i;num[i]++} }
END{for (i=1;i<=maxF;i++){ print(i,sum[i]/num[i]) } } ' infile
enfoque GNUawk
:
awk -v FPAT='[1-9][0-9]*' '{ n += NF; for (i=1;i<=NF;i++) sum += $i }END{ print sum/n }' file
La salida:
4.88889
Convertiría los espacios en líneas nuevas y tendría un solo número por línea:
tr ' ' '\n' <"$infile" | awk '$1 > 0 {n++; sum+=$1} END {if (n>0) print sum/n}'