Программа awk
будет ожидать ввода и для каждой строки ввода будет печатать слово foo
. Это то, что делает программа awk
{ print "foo" }
.
Напротив, echo
в первой подстановке команд не ожидает ввода.
Хотели бы вы, чтобы программа awk
просто печатала что-то без каких-либо входных данных, выполняя вывод в блоке BEGIN
:
awk 'BEGIN { print "foo" }'
Блок BEGIN
выполняется перед чтением первой строки ввода, и, поскольку в сценарии нет других блоков и нет входного файла, он завершает работу.
Кроме того, никогда не пишите код типа echo $(... )
или echo `... `
, вместо этого используйте код внутри подстановки команд.
Самая большая проблема с Linux заключается в том, что его нет.
Мы говорим о нескольких дистрибутивах, которые собраны по-разному, с использованием разных библиотек, версий приложений и флагов компиляции. Даже когда речь идет об одном и том же дистрибутиве, например. Ubuntu 16.10 и Ubuntu 18.10, приложение, скомпилированное для последней, не обязательно будет работать в первой.
Чтобы решить эту проблему, были созданы Flatpak, Snap и AppImage, которые в основном упаковывают приложение и все его зависимости в виде пакета. Это приводит к другим серьезным проблемам, но, по крайней мере, позволяет ISV упаковывать свои приложения, которые работают во всех дистрибутивах Linux.