Почему команда overwrite
trap, чтобы файлы удалялись при выходе из нее? Подсказка: попробуйте нажать клавишу trap "echo exiting; exit 1" 0 2
sleep 10
Добавьте флаг -v
replace для вывода всех измененных строк на /dev/tty.s/$left/$right/g $vflag.Увеличьте надежность команды replace
Можно ли использовать replace
i на index всюду в программе? Какие вы внесли бы изменения, чтобы добиться этого?Достаточно ли команда replace
/usr/bin? Не лучше ли вводить по мере необходимости подходящие команды редактора sed (да или нет)? Обоснуйте свой ответ.(
$ overwrite файл 'who | sort'
не выполняется. Объясните причину этого и исправьте ее.
eval в справочном руководстве по sh(1). Как ваше решение повлияет на интерпретацию специальных символов в команде?5.6 Команда zap
Команда kill
ps, чтобы узнать номер процесса, а затем ввести этот номер в качестве аргумента для команды kill. Однако нелепо иметь программу, выдающую номер процесса, который сразу же передается вручную другой программе. Имеет смысл написать программу, скажем zap, для автоматического выполнения такой работы. Здесь, правда, есть одно препятствие: уничтожение процессов опасно, поэтому следует принять меры для обеспечения сохранности нужных процессов. Хорошей защитой всегда служат диалоговое выполнение zap и использование команды pick для выбора "жертв".Кратко напомним вам о команде pick
y, то аргумент выводится (команда pick обсуждается в следующем разделе). В нашем случае pick используется для подтверждения, что процессы, выбранные по имени, — именно те, которые пользователь хочет уничтожить:$ cat zap
# zap pattern: kill all processes matching pattern
# BUG in this version
PATH=/bin:/usr/bin
case $# in
0) echo 'Usage: zap pattern' 1>&2; exit 1
esac
kill `pick \`ps -ag | grep "$*"\` | awk '{print $1}'`
Обратите внимание на вложенные знаки слабого ударения, защищенные символами обратной дробной черты, awk
ps, выбранной с помощью pick:$ sleep 1000 &
2216
$ ps -ag
PID TTY TIME CMD
...
2216 0 0:00 sleep 1000
...
$ zap sleep
2216?
0? q
$
Проблема состоит в том, что выходные данные команды ps
pick как отдельные аргументы вместо того, чтобы обрабатываться сразу по строке. Обычная процедура интерпретатора заключается в разбиении строк на аргументы с границами пробел/не пробел, как показано ниже:for i in 1 2 3 4 5
В этой программе нужно контролировать процесс разбиения интерпретатором строк на аргументы, чтобы только символ перевода строки разделял соседние "слова".
Внутренняя переменная интерпретатора IFS
for. Обычно IFS содержит пробелы, символы табуляции и конца строки, но мы можем заменить ее на что-либо нужное, например просто на символ перевода строки: