Анализ кода1 OP:
awk 'END { for (name in ENVIRON) {
print "key: "name; }
}' >> app-deployment.yaml
Нет ни одного Input_file, переданного в блок awk
, и END
в любом коде awk
требует передачи любого Input_file, он зависает там, так как не может найти его.
Анализ кода2 OP:
awk 'END { for (name in ENVIRON) {
print "key: "name; }
}' < /dev/null
Теперь вы передаете /dev/null
в качестве Входа awk
(хотя он НЕ будет иметь никакого содержимого, которое будет считываться awk
, но все же ему будет передан Вход), так что, как правило, когда Input_file имеет значение завершена обработка END
блочных процессов, в этом случае, поскольку содержимого НЕТ, поэтому в разделе END
должна быть напечатана выписка операторов.
Чтобы заставить awk
код работать без прохождения Input_file
пути: В случае, если кто-то хочет awk
работать без Input_file
, используйте только BEGIN
раздел , который согласно странице man awk
будет выполнен до обработки Input_file
, так что даже если вы НЕ передаете любой файл Input_file, он НЕ будет ожидать его присутствия, а после выполнения секции BEGIN
он выйдет из программы.