Поддержки Apache несколько специальных отладок определяют, чтобы использоваться с-D:
Таким образом выполнение "httpd-D ПЕРЕДНИЙ ПЛАН" сохранит его от daemonizing.
Я также столкнулся с потоком форума с launchd plist для Apache2, который Вы смогли адаптировать.
(Примечание: Я знаю, что ни один из них не отвечает на фактический вопрос, но надо надеяться они полезны для проблемы, первоначально описанной.)
Так... формат awk
программа является серией EXPRESSION { ACTION }
операторы. Если Вы опускаете ACTION
часть, это принимает print
, и если Вы опускаете EXPRESSION
, это соответствует всему. Таким образом, это печатает все:
awk 1
Поскольку Ваше выражение (1
) оценивает как "верный" (и у Вас нет действия). Это верно для всех Ваших "x-does-print" примеров, так как дали Ваш демонстрационный вход, у них всех есть ненулевое и непустое EXPRESSION
и нет ACTION
. Учитывая пустую входную строку, $0
во втором примере ничего не произвел бы.
Аналогично, Ваши примеры "ничего-печати" кроме первого имеют выражение, которое оценивает ко "лжи" (или пустая строка или числовой 0). {$0="abc"}
пример работает по-другому: это ничего не печатает, потому что это не имеет никакой инструкции по печати. Учитывая длинную входную строку по крайней мере с 999 полями, второй пример ($999
) на самом деле распечатал бы строку.
Это фундаментально для как awk
работает. Настолько уверенный, это документируется, и это не собирается повреждаться.
Обратите внимание, что Ваши примеры "катастрофических отказов" на самом деле не отказывают; Вы только что сделали основную ошибку в своем синтаксисе оболочки. Awk интерпретирует аргументы, запускающиеся с -
как параметры командной строки. Заключение в кавычки их ничего не изменяет. Если Вы хотите передать awk отрицательные числа как это, необходимо снабдить префиксом awk программу --
чтобы указать к awk, что это должно прекратить обрабатывать опции:
echo 'crashes' | awk -- -3.14159
Распечатает "катастрофические отказы", с тех пор -3.14150
ни пустая строка, ни числовой 0.
Много языков программирования имеют специальное представление для понятия “истинных” и “ложных”. Такие языки обычно используют специальную истину и ложь констант или возможно их прописные эквиваленты. Однако awk отличается. Это одалживает очень простое понятие истины и лжи от C. В awk, любом ненулевом числовом значении или любом значении непустой строки верно. Любое другое значение (нуль или пустая строка, "") является ложью.
Да, то использование является портативным и будущим безопасным.
Заметка на полях, это показывает Ваш второй пример,
echo 'b-does-print-$0' | awk '$0'
не распечатает каждую строку, только те, что awk интерпретирует как истинная строка, т.е. пустая строка или строка, содержащая только способ записать номер 0 (0
, 00
, 0.0e3
, -.0
, …).
awk 1
действительно просто более длинный способ ввестиcat
. – larsks 08.03.2012, 18:23cat
, но более "реалистический" пример больше похож на это:awk '{$0="abc"}1'
... Я первоначально думал, что это, должно быть, была истинная/ложная вещь, но когда отрицательные числа перестали работать, я полагал, что пришло время задать вопрос... Я не рассмотрел возможности-1
будучи аргументом, но я предполагаю, что это довольно очевидно задним числом :)... Спасибо... – Peter.O 08.03.2012, 19:54awk ''
пример больше похожawk 'BEGIN {}'
чем он похожawk '0'
. Первые два не используют stdin; третье будет. Попробоватьecho test | { awk ''; echo done; cat; }
– dubiousjim 19.04.2012, 21:57