Я делаю bash-скрипт для чтения файлов в /usr/share/applications чтобы создать меню для IceWM. Вот часть моего кода:

file = nm-connection-editor.desktop
name = $((grep -m 1 "Name=" $file) | sed 's/Name=//g')
icon = $ ((grep Icon= $file) | sed 's/Icon=//g')
execu = $ ((grep -m 1 Exec= $file) | sed 's/Exec=//g')
commandline = "prog $name $icon $execu"
cate = $(grep -m 1 Categories $file)
echo $cate result in:
Categories=GNOME;GTK;Settings;X-GNOME-NetworkSettings;

if [ $(echo $cate |grep Network) ]; then echo $commandline >> menu.Network; fi
if [ $(echo $cate |grep Settings) ]; then echo $commandline >> menu.Settings; fi

Проблема в том, что $commandline появляется в обеих категориях.

Я хочу, чтобы он появился только в настройках

Я думаю, что в списке слов: Игры Утилита Сетевые настройки Office System ...

и выберите (из $cate) ближайший к началу строки, но как?

1 ответ1

1

Ваш последовательный оператор if выглядит более естественным для case:

case "$cate" in
    *Network*)
        echo $commandline >> menu.Network
        ;;
    *Settings*)
        echo $commandline >> menu.Settings
        ;;
esac

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .