Я не могу использовать терминал во время работы команды gedit

44

Я недавно установил 12.04.
Когда я пытаюсь отредактировать файл с помощью gedit , я не могу использовать терминал, пока не закрою файл редактирования или мне не нужно открыть новый терминал. Но я думаю, что у меня не было этой проблемы с 11.04, однако я не уверен.
Есть ли в любом случае, чтобы избежать этого и использовать тот же терминал при редактировании файлов.

Хоссейн Хоссейнванд
источник

Ответы:

81

Краткий ответ

В не отвечающем терминале:

  1. Хит Ctrl+ Z.
  2. Введите bgи введите.
  3. Введите disownи введите.

Длинный ответ

В неотвечающем терминале нажмите Ctrl+ Z, это «приостановит» процесс (или «задание») и вернет вам консольный элемент управления. Однако вы заметите, что он geditперестает отвечать, и вы не можете его использовать.

Дополнительно : если вы хотите, вы можете выполнить команду jobs, вы заметите, что она будет читать Остановлено для geditкоманды, поэтому вы не можете ее использовать.

Для успешного выполнения задания в фоновом режиме (т. geditЕ. Для повторного реагирования) выполните команду bg(имеется в виду фон). Теперь вы сможете использовать gedit, и в то же время иметь подсказку для себя.

Дополнительно : теперь, если вы выполните jobs, вы заметите, что он будет читать Запуск .

Вы можете преодолеть все это с самого начала. Когда вы запускаете geditиз терминала, добавьте &в конец команды, так что-то вроде этого gedit /path/to/file &. Он запустится geditв фоновом режиме с первого места (вам может понадобиться нажать Enterпару раз, чтобы вернуть управление консоли).

Дополнительно : если вы следили за этими дополнительными заметками, вы могли заметить, что во второй раз вы jobsзаметили, что bash добавил a &в конец geditкоманды.

Как только вы привыкнете к этой системе, вы можете заметить, что если вы закроете терминал, gedit также прекратит работу даже без диалогового окна подтверждения. Чтобы этого не происходило, запустите disownкоманду, которая отсоединит процесс gedit от терминала, удалив его из списка, возвращаемого jobs.

Алаа али
источник
2
Меня всегда удивляло, что нет никакого способа немедленно отодвинуть на задний план процесс, который выполняется на переднем плане. Вы должны сначала приостановить это, что иногда не жизнеспособно.
детально
@ внимательно прочитайте часть «Вы можете преодолеть ...» снова!
Гюнтберт
@guntbert - не помогает, если процесс уже запущен ...
детально
45

Просто введите:

gedit <filename-to-edit> &

Это немедленно вернет вам командную строку.

david6
источник
5
Это важная идиома Unix, которую стоит знать. Любая команда может быть запущена в фоновом режиме. Интерактивные инструменты, очевидно, будут сбиты с толку этой обработкой, но, например, bubblesort war_and_peace.txt% позволит вашему сортировщику провернуть шедевр (на долгое время), пока вы продолжаете свою работу (скажем, реализует быструю сортировку). или что-то)
Джон Кипарски
1
@JonKiparsky Забавный пример - имеет смысл.
Джо
25

Вы можете использовать, nohupчтобы предотвратить подключение GUI к терминалу:

nohup mupdf some.pdf &

Это позволит вам закрыть терминал, с которого вы запускаете, без закрытия программы.

Вы также должны заметить, что команда nohup создаст файл с командой stdoutи stderrкомандой, которую вы запускаете. Если вы хотите предотвратить это, добавьте &>/dev/nullперед &.

nohup mupdf some.pdf &>/dev/null &
Braiam
источник
4
«nohup» означает «не вешай трубку». Это восходит к ранней версии Unix, когда (физические) терминалы регулярно подключались через телефонные линии, и поэтому вы бы закрыли терминал, повесив трубку.
MSalters
3
Дополнительная информация: Команда nohup создаст файл, nohup.outсодержащий выходные данные команды. Это полезно, если вы хотите просмотреть сообщения об ошибках. Если вы не хотите, чтобы файл был создан, добавьте перенаправление следующим образом:nohup mupdf some.pdf &>/dev/null &
Пэдди Ландау
19

Вы также можете использовать disownкоманду. Это особенно полезно, когда вы уже начали процесс, который больше не хотите подключать к терминалу.

Основная процедура, если я правильно помню, это что-то вроде этого:

$ > firefox      #Oops
Ctrl + z         #Suspend the process
$ > bg           #Push the process to the background
$ > disown       #Detach most recent process started or stopped
$ > exit         #Terminal gone!

Обратите внимание, что отречение является bashспецифическим.

Этот пост в блоге объясняет оба метода довольно хорошо.

Man страница для отречься

jmathew
источник
Ярлык:firefox & disown
Flimm
13

От man gedit:

-b, --background
         Run gedit in the background.

Итак, если вы запустите geditс -bпараметром, он запустится в фоновом режиме:

gedit -b [FILE-NAME]

Более того, затем вы можете создать псевдоним для gedit -b(смотрите здесь, как создать постоянный псевдоним):

alias gedit='gedit -b'

Отныне, в будущем вы можете использовать gedit [FILE-NAME]как обычно, и это начнется в фоновом режиме.

Раду Рэдяну
источник
2
Это плохая идея использовать псевдоним для переопределения общих команд. Вы найдете много тем об этом на stackexchange. Можно использовать псевдоним с другим именем. Короче говоря, псевдоним существующих команд создает неожиданное поведение на вашем компьютере, если кто-то когда-либо использует его (например, пытается помочь вам решить какую-то другую проблему), и делает то же самое с вами, когда вы используете другую систему без этих псевдонимов и ваших команд. не работает, как вы ожидаете. Один из потомков для этого - псевдоним rm = 'rm -i'. Вы привыкнете удалять вещи со вторым шансом, который не всегда есть.
Джо
10

Просто введите:

gedit FILENAME & disown

Завершение команды с помощью &in bash запускает эту команду в фоновом режиме. Однако этот процесс все еще привязан к терминалу.

Без disown, если вы закроете терминал, gedit закроется, даже не предложив вам сохранить отредактированный файл. disownотсоединяет фоновый процесс от текущего терминала, так что если вы закроете терминал, gedit продолжит работать в обычном режиме. Оказывается, я был неправ, это не относится к Bash, но это относится к Zsh. Вы все еще должны бежать detachпосле выполнения ctrl- zи bg, тем не менее, даже в bash.

Вы можете узнать больше о встроенных модулях jobs, disownи &метасимволе в страницах руководства для bashкомандыЗначок Manpage , особенно в разделе под названием «Контроль работы».

Флимм
источник
с помощью disownя смог держать гедит открытым после закрытия терминала. Я не понял, что вы сказали о том, что «это не относится к bash, но это относится к zsh»
KrIsHnA
0

Это, вероятно, потому что вы открыли Gedit через терминал. Когда вы делаете это, вы видите вывод командной строки, который обычно скрыт, если запущен через графический интерфейс. Лучший способ исправить это - открыть новое окно терминала. Другой станет доступным после закрытия Gedit. Вы также можете использовать переключатель, предложенный выше пользователем.

user175759
источник
Новое окно терминала просто загромождает рабочий стол, даже если оно свернуто. Использование & с или без дизъюнкта намного проще и чище.
Джо