Экран входа в систему изменился после использования VNC

Вы можете использовать exec ./your-script.

Терминальный эмулятор, такой как GNOME Terminal, завершает работу, когда внутри него запускается начальный процесс, который обычно является оболочкой.

Если вы уже находитесь в терминале и единственное, что хотите сделать, прежде чем покинуть этот терминал, чтобы запустить конкретный скрипт (или программу), то это означает, что вам больше не нужна оболочка, работающая в ней. Таким образом, вы можете использовать встроенную оболочку exec оболочки, чтобы заставить оболочку заменить себя процессом, созданным вашей командой.

В случае вашего сценария это другой процесс оболочки - так же, как вторая оболочка процесс создается при запуске скрипта без exec.

Синтаксис exec command, например, exec ./your-script.

exec: Пример

Например, предположим, что у меня есть сценарий оболочки, называемый count, отмеченный исполняемый файл и находится в текущем каталоге. Он содержит:

#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done

И в терминале я запускаю:

exec ./count

Это печатает цифры 5, 4, 3, 2 и 1, по одному в секунду, а затем закрывается окно терминала.

Если вы запустите это из чего-то другого, кроме первого процесса запустите в своем терминале - например, если вы сначала запустили bash, чтобы запустить другой экземпляр оболочки, то это вернет вас к оболочке, которая создала , заменит сам процесс , а не выйдет из терминала. (Это предостережение применимо в равной степени к методам, основанным на exit.)

Вы можете использовать ./your-script; exit.

Если вы не хотите, чтобы ваша оболочка заменила себя новый процесс (через exec), вы можете сказать, что он придерживается, но выходите сразу после завершения нового процесса.

Для этого запустите команду и команду exit, разделенные [ f20], поэтому они могут быть заданы на одной строке.

Синтаксис command; exit, например ./your-script; exit.

command; exit vs. command && exit

Вы можете заметить, что это похоже на метод ./your-script && exit, предложенный в ответах kos и heemayl. Разница в том, что:

В случае вашего скрипта это другой процесс оболочки - так же, как создается второй процесс оболочки при запуске скрипта без exec. [!d5 ] ; запускает вторую команду независимо от того, сообщала ли первая команда успех.

Какой из них вы хотите, зависит от конкретной ситуации. Если команда не удалась, вы хотите, чтобы вызывающая оболочка (и хостинг-терминал) не вставала? Если это так, используйте &&; Если нет, используйте ;.

Существует также command || exit, который выходит из вызывающей оболочки только в том случае, если command сообщает об ошибке.

0
задан 10 February 2018 в 22:35

0 ответов

Другие вопросы по тегам:

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