Может ' t запускаю 'kill - - $$' в моем сценарии оболочки, когда я sudo it

Предположим, вы хотите создать ярлык для запуска игры с 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
из командного терминала и сообщить мне о любых ошибках, которые он выдает.

2
05.09.2017, 12:38
1 ответ

Это 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.

2
27.01.2020, 22:09

Теги

Похожие вопросы