Операционная система UNIX. Руководство пользователя

       

Отладка программы


Для нахождения и корректировки ошибок вам могут понадобиться две опции команды sh:

sh -v shellprogramname

печатает вводимые shell строки, как если бы они были прочитаны системой; sh -x shellprogramname

печатает команды и их аргументы по мере их выполнения.

Для примера создадим shell программу, которая содержит ошибку:

$ cat bug<CR>

today=`date` echo enter person read person mail $1 $person When you log off once into my office olease. $today MLH $

Обратите внимание, что today равно выводу команды date, которая заключена между знаками слабого ударения.

При выполнении программы bug, чтобы завершить программу, вы должны нажать клавишу BREAK или DELETE.

Чтобы отладить эту программу, попытайтесь выполнить ее с использованием sh -v. Будут напечатаны строки файла, как если бы они были прочитаны системой:

$ sh -v bug tom<CR>

today=`date` echo enter person enter person read person tom mail $1

Обратите внимание, что вывод остановился на команде mail, т.к. здесь обнаружена ошибка. Вы должны использовать here document, чтобы перенаправить ввод в mail.

Откорректированная программа bug будет выглядеть следующим образом:

$ cat bug<CR>

today=`date` echo enter person read person mail $1 <<! $person When you log off once into my office olease. $today MLH ! $

Команда tee полезна при отладке конвейеров. В то время как стандартный ввод команда направляет в стандартный вывод, она сохраняет копию этого ввода в файл, имя которого дано как аргумент.

Общий формат команды tee:

command1 | tee saverfile | command2<CR>

где saverfile - это файл, который сохраняет вывод команды для анализа.

Предположим, вы хотите проверить вывод команды grep в следующей командной строке:

who | grep $1 | cut -c1-9<CR>

Вы можете воспользоваться командой tee, чтобы скопировать вывод команды grep в файл check не разрушая остальной конвейер:

who | grep $1 | tee check | cut -c1-9<CR>

Файл check содержит копию вывода grep, как показано на следующем экране:

$ who | grep mike | tee check | cut -c1-9<CR>

mike $ cat check mike tty61 Apr 10 10:30 $



Содержание раздела