Вопрос или проблема
Я пытаюсь открыть два новых терминала и запустить в них .sh файлы из скрипта, но после завершения всех команд я хочу, чтобы один терминал закрылся. Я использую команду gnome-terminal -e "sh patterns.sh";
для открытия нового терминала и запуска скрипта.
с помощью следующей команды вы убиваете gnome-terminal:
kill $PPID
Я пробовал это с xterm, у меня нет gnome.
xterm -hold -e "/temp/test.sh; ps -fp \$PPID; sleep 5; kill \$PPID"
Вот как это работает с gnome-terminal:
gnome-terminal -e '/bin/ksh -c "/temp/test.sh; kill $PPID"'
Ответ или решение
Чтобы закрыть новый терминал принудительно после выполнения скриптов, несмотря на настройки профиля, такие как «Держать терминал открытым после завершения команд», можно использовать несколько методов, чтобы обойти это ограничение в gnome-terminal и xterm.
Использование gnome-terminal
При запуске gnome-terminal с параметром -e
, чтобы указать, какую команду нужно выполнить, является стандартным способом. Однако для решения вашей задачи, вы можете использовать оболочку для запуска скрипта и немедленного закрытия терминала. Пример следующего кода:
gnome-terminal -- bash -c "/temp/test.sh; exit"
В этом примере:
-- bash -c
указывает на то, что мы хотим использовать bash для выполнения команды."/temp/test.sh; exit"
– после выполнения вашего скрипта, командаexit
завершает сессию терминала, и он закроется.
Использование xterm
В случае, если вы используете xterm и хотите избежать использования опции -hold
, есть возможность применять передаваемые параметры. Рассмотрим пример:
xterm -e "/temp/test.sh; exit"
Таким образом, ваш скрипт будет выполнен, и после его завершения xterm закроется, так как команда exit
завершит сессию.
Альтернативные подходы
Если вышеперечисленные методы не сработают, то можно попробовать использовать функцию kill
. Это применяется, если процесс не останавливается после окончания выполнения команды. Рассмотрим следующую конструкцию:
xterm -e "sh /temp/test.sh; sleep 5; kill -9 \$\$"
Здесь kill -9 $$
принудительно завершает процесс терминала. Однако следует использовать этот метод с осторожностью, так как это может вызвать потерю данных, если они не были сохранены.
Итоги
В результате описанных выше методов вы сможете эффективно открыть терминал для выполнения скрипта и затем принудительно закрыть его по завершении команд, игнорируя настройки профиля. Использование подхода с exit
является наиболее рекомендуемым, так как это гарантирует безопасное завершение работы терминала.