Предположим, вы хотите создать ярлык для запуска игры с Wine, вот как это сделать.
Создайте сценарий оболочки запуска, затем создайте для него запись в формате .desktop и поместите ее в «~ / .local / share / applications» . Это добавит его в системное меню, и его можно будет открыть, как любую другую программу.
Создайте файл с именем princeofpersia.sh в ~ / .wine .
Поместите в него следующее содержимое, точно так же, как здесь:
cd "~/.wine/drive_c/Program Files (x86)/ubisoft/prince of persia/"
wine "$PWD/prince of persia.exe"
Теперь перейдите к ~. / Local / share / applications
Поместите файл с именем princeofpersia. рабочий стол там.
Поместите в него следующее содержимое, как здесь.
[DesktopEntry]
Type=Application
Name=Prince of Persia
Exec=bash ~/.wine/princeofpersia.sh
Terminal=false
StartupNotify=false
Categories=Game;ArcadeGame;
Keywords=game;arcade;platform;
Выйдите из системы и снова войдите, теперь он должен присутствовать в разделе
«Игры» рядом со всеми собственными приложениями Linux.
Если он не появится в первый раз, так вот.
Возможно, вам потребуется установить разрешения с помощью этих команд.
chmod a+x ~./local/share/applications/princeofpersia.desktop
chmod a+x ~./wine/princeofpersia.sh
Затем выйдите из системы и войдите снова, и он должен быть там.
Если это все равно не сработает, попробуйте запустить ~ / .wine / princeofpersia.sh
из командного терминала и сообщить мне о любых ошибках, которые он выдает.
Это kill -- -"$pgid"
, то есть это должен быть процесс группы id. kill -- -"$$"
будет работать только в том случае, если оболочка была лидером группы процессов, чего не происходит при запуске с sudo
из интерактивной оболочки:
$ sudo bash -c 'ps -j; exit'
PID PGID SID TTY TIME CMD
26786 26786 29719 pts/39 00:00:00 sudo
26794 26786 29719 pts/39 00:00:00 bash
26795 26786 29719 pts/39 00:00:00 ps
sudo
является лидером группы процессов, а не bash
.
Итак, вам нужно сделать kill -- -"$(ps -o pgid= -p "$$")"
или просто:
kill 0
Это команда для уничтожения собственной группы процессов.
В любом случае, это допустимо только в том случае, если ваш скрипт вызывается сам по себе из интерактивной оболочки (, которая выполняет управление заданиями ).
Также отметим, что в:
(the-script; echo "$?")
или:
the-script | cmd
Подоболочка в первом случае или cmd
является вторым, также помещаются в ту же группу процессов, поэтому она также будет уничтожена этим kill 0
.