Я также сталкивался с этой проблемой, и я провел почти 2 часа в Интернете в поисках решений. Вы были на правильном пути, yaboot это правильное место, чтобы посмотреть. Однако есть еще кое-что, прежде чем мы избавимся от этого бесполезного монитора.
Я нашел разговор по электронной почте, который решает нашу проблему. Я не слишком уверен, что вы решили свою проблему, но для блага других я опубликую решение и ссылку здесь. (Просто потому, что Google считает, что здесь есть решение ...)
Ссылка: http://comments.gmane.org/gmane.linux.ports.ppc.embedded/34058 [ 114]
В случае, если срок действия ссылки истекает, вот копия и вставка:
Кредит идет: Romain Goyet написал 24 марта 2010 11:32
[ 110]
При открытии всего одного файла Вы не делаете действительно потребность использовать сценарий, потому что сценарий предназначен, чтобы быть простым способом выполнить несколько команд подряд, в то время как здесь просто необходимо выполнить две команды (включая exit
).
, Если Вы хотите работать exit
за командой или за цепочкой команд, можно объединить ее в цепочку к тому, что Вы уже имеете при помощи &&
оператор (который на успехе предыдущей команды / цепочка команд выполнит следующую команду) или при помощи ;
оператор (который и на успехе и при отказе предыдущей команды / цепочка команд выполнит следующую команду).
В этом случае это было бы что-то как этот:
gnome-open <path_to_pdf_file> && exit
*< path_to_pfd_file> = путь файла
exit
PDF, помещенного в конце сценария, не работает, потому что он просто выходит bash
экземпляр, в котором запущен скрипт, который является другим bash
экземпляр, чем Терминал, внутренний bash
экземпляр.
, Если Вы хотите использовать сценарий так или иначе, самый простой путь, он должен просто назвать сценарий как так:
<path_to_script> && exit
Или если сценарий находится в текущем рабочем каталоге Терминала как так:
./<script> && exit
, Если Вы действительно не хотите к / не может сделать этого, второй самый большой простой путь состоит в том, чтобы добавить эту строку в конце Вашего сценария:
kill -9 $PPID
Это отправит SIGKILL
сигнал к к родительскому процессу сценария (bash
экземпляр, связанный с Терминалом). Если только один bash
экземпляр будет связан с Терминалом, то это уничтожаемое заставит Терминал закрывать себя. Если приблизительно [1 115], экземпляры связаны с Терминалом, это уничтожаемое, не заставят Терминал закрывать себя.
Этот сценарий завершает терминал и таким образом оболочку и его.
Это беспощадно уничтожает все процессы. Если у Вас есть несколько вкладок, открытых в терминале, то они также закрываются.
проблема, если несколько терминалов будут открыты, и это дочерние процессы gnome-terminal-server
, то все терминалы будут уничтожены.
В этом случае, сценарий должен быть запущен в независимом терминале, например, xterm
<your_command> & disown
PPPID=$(awk '{print $4}' "/proc/$PPID/stat")
kill $PPPID
PPID
PPID является идентификатором родительского процесса, в этом случае оболочка (e.g. /bin/bash
)
PPPID
, PPPID является идентификатором родительского процесса PPID, в этом случае, окно терминала
<your_command> & disown
В оболочке удара, отрицание встроенной команды используется, чтобы удалить задания из таблицы задания или отметить задания так, чтобы сигнал SIGHUP не был отправлен им, если родительская оболочка получает его (например, если пользователь выходит из системы).
awk '{print $4}' "/proc/$PPID/stat"
Получает значение четвертого столбца файла /proc/$PPID/stat
(например, для /proc/1/stat
это возвращается 0)
ps xa | grep $
= > 4381 pts/0 Ss 0:01 /usr/bin/zsh
– I159
21.04.2015, 03:39
exec ./your-script
. эмулятор терминала А как Терминал GNOME выходит, когда начальное выполнение процесса в нем - который обычно является оболочкой - выходы.
, Если Вы уже находитесь в терминале и единственной вещи, Вы хотите сделать прежде, чем выйти из того терминала, должен запустить конкретный скрипт (или программа), затем это означает больше реальную необходимость в оболочке, которую это выполняет в нем больше. Таким образом можно использовать оболочку 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
сначала для запуска другого экземпляра оболочки - затем, это возвращает Вас оболочке, которая создала что процесс, вместо того, чтобы выйти из терминала. (Этот протест применяется одинаково к [1 115] - базирующиеся методы.)
./your-script; exit
. , Если Вы не хотите говорить Вашей оболочке заменять себя новым процессом (через [1 117]), можно сказать этому слоняться поблизости, но сразу выйти из себя после того, как новый процесс заканчивается.
, Чтобы сделать это, выполните свою команду и эти exit
команда, разделенная [1 119], таким образом, им можно дать на одной строке.
синтаксис command; exit
, например, ./your-script; exit
.
command; exit
по сравнению с [1 123] можно заметить, что это выглядит подобным ./your-script && exit
метод, предложенный в [1 131] Кос и heemayl's ответы. Различие то, что:
&&
выполнения вторая команда, только если первая команда сообщила, что успешно выполнилась путем возврата кода выхода нуля. ;
выполнения вторая команда независимо от того, сообщила ли первая команда об успехе. то, Какой Вы хотите, зависит от определенной ситуации. Если команда перестала работать, Вы хотите, чтобы оболочка вызова (и терминал хостинга) не легла спать? Если так, используйте &&
; в противном случае используйте ;
.
существует также command || exit
, который выходит из оболочки вызова, только если command
сообщил отказ .
Простое решение было бы:
xdg-open file.pdf && exit
В отличие от другой подобной команды nohup
не нужно для создания команды, игнорирующей SIGHUP
, при этом причина xdg-open
, выйдет из порождения дочернего процесса, который является предпочтительным приложением для открытия файла PDF. Поскольку фактический процесс, запущенный с терминала, больше не должен там уничтожаться, nohup
не нужно.
&&
указывает, что следующая команда будет выполнена, если предыдущая команда будет успешна т.е. возвратится, то код выхода 0
($?=0
) и exit
просто закроет терминал.
exit
в конец и не работал..
– Tarun Uday
21.04.2015, 05:13
exit
внутренняя часть сценарий, который неполезен, потому что это имеет эффект выхода bash
экземпляр, в котором сценарий выполняется скорее тогда родитель bash
экземпляр (тот, связанный с Терминалом), который заставил бы Терминал закрываться вместо этого
– zeta
21.04.2015, 08:54
xdg-open
выполнения уже в фоновом режиме и расцепляемый от Терминал, таким образом, Вы don' t потребность nohup
здесь, плюс от того, что я понимаю выполнения OP xdg-open
многократно в сценарии к пакетно-открытому несколько файлов, с помощью xdg-open
как эта внутренняя часть, из которой сценарий заставил бы сценарий выходить в первом xdg-open
происшествие
– A-B-B
21.04.2015, 09:04
xdg-open
в backgr, даже если я имел nohup
, по различной причине & должен ли быть.. любой фоновый процесс от инициирующего терминала будет уничтожен при уничтожении родительского терминала.. nohup
там для предотвращения его.. как я don' t должен использовать терминал в интерактивном режиме снова, нет никакой потребности поместить процесс в bg.. на Вашей 2-й точке, которая может также быть предотвращена путем выполнения каждого xdg-open && exit
в подоболочке..
– Stefano Sanfilippo
21.04.2015, 09:12
Лично я выполнил бы команду, чтобы открыть PDF или другие файлы в подоболочке, поместить задержку, чтобы позволить файлам открыться и затем выйти. В основном вот то, что я протестировал (nohup gnome-open *.pdf &); sleep 2; exit
, Вариация на это была бы nohup gnome-open *.pdf && sleep 2 && exit
nohup
игнорирует сигнал зависания, nohup xdg-open some_program
работал на меня, и exit
было ненужным. nohup
перенаправления обмениваются сообщениями к nohup.out
файл: nohup: ignoring input and appending output to nohup.out
– CJ Travis
13.09.2019, 04:36
Явно отвечать на вопрос заголовка,
"Терминал выхода после запущения скрипта удара" :
, не смотря на детали, что делает сценарий, скрипт может быть непосредственно запущен в терминале с опцией -e
(--command
), не запуская оболочку - это используется вместо оболочки затем:
gnome-terminal -e ./script.sh
Использование опция -x
(--execute
), когда Вы хотите обеспечить аргументы сценарию. С этим просто целый остаток от командной строки взят в качестве команды и аргументов.
gnome-terminal -x ./script.sh foo bar
, Если Ваш сценарий выходит, нет никакой интерактивной оболочки, которая могла бы поддержать что-либо путем ожидания ввода данных пользователем.
teminal просто выйдет после команды, работающей в нем, выходы - как это, закрываясь после sleep
выполнили 4 секунды без оболочки:
gnome-terminal -x sleep 4
, Конечно, можно все еще использовать сценарии оболочки, потому что сценарий использует другой экземпляр оболочки так или иначе.
кроме того, можно выполнить оболочку с явным сценарием - это не будет интерактивным:
gnome-terminal -x bash -c "echo 'Hello!'; sleep 4"
SIGTERM
вот недостаточно. – wajiw 21.04.2015, 04:45