Ответ Хэмиша велик, но я хотел бы предложить более простую альтернативу, с меньшим количеством задействованных труб:
$(awk -F= '/^Exec/||/^TryExec/ {print $2;exit}' /usr/share/applications/firefox.desktop)
В этом случае awk ищет строку начиная с Exec, а затем мы просто печатаем поля после этой строки, используя для цикла и = печатаем поле 2, т. е. все, что приходит после этого поля. Кудрявые скобки на концах команд $(...) - это замена параметров, поэтому shell будет выполнять любую команду awk; в этом случае возвращается фактическая команда, которая появляется после Exec=.
В некоторых редких случаях может быть более одного знака =, что по-прежнему возможно. Для этого я предлагаю
$(awk -F= '/^Exec/||/^TryExec/ {for(i=2;i<=NF;i++) print $i;exit}' /usr/share/applications/firefox.desktop)
Изменение, о котором вы спрашиваете - обновление с Ubuntu с 16 по 17, - это обновление версии.
unattended-upgrades не обновляет выпуск, он устанавливает обновления только в той же версии.
Изменение, о котором вы спрашиваете - обновление с Ubuntu с 16 по 17, - это обновление версии.
unattended-upgrades не обновляет выпуск, он устанавливает обновления только в той же версии.
Изменение, о котором вы спрашиваете - обновление с Ubuntu с 16 по 17, - это обновление версии.
unattended-upgrades не обновляет выпуск, он устанавливает обновления только в той же версии.
Изменение, о котором вы спрашиваете - обновление с Ubuntu с 16 по 17, - это обновление версии.
unattended-upgrades не обновляет выпуск, он устанавливает обновления только в той же версии.