Я не можу використовувати термінал під час виконання команди gedit


44

Я нещодавно встановив 12.04.
Коли я намагаюся редагувати файл з gedit , я не можу використовувати термінал, поки не закрию файл редагування або не доведеться відкрити новий термінал. Але я думаю, що у мене не було цієї проблеми з 11.04, проте я не впевнений.
Чи варто уникнути цього і використовувати той самий термінал під час редагування файлів.

Відповіді:


80

Коротка відповідь

У невідповідальному терміналі:

  1. Натисніть Ctrl+ Z.
  2. Введіть bgі введіть.
  3. Введіть disownі введіть.

Довга відповідь

У невідповідальному терміналі натисніть Ctrl+ Z, це "призупинить" процес (або "завдання") і поверне вам керування консоллю. Однак ви помітите, що це geditстає невідповідним, і ви не можете ним користуватися.

Додатково : якщо ви хочете, ви можете виконати команду jobs, ви помітите, що вона прочитає " Зупинено для geditкоманди", тому ви не можете її використовувати.

Щоб робота успішно виконувалася у фоновому режимі (тобто, щоб geditзнову реагувати), виконайте команду bg(означає фон). Тепер ви зможете користуватися geditі одночасно мати підказку для себе.

Додатково : зараз, якщо ви виконаєте jobs, ви помітите, що він буде читати Запуск .

Ви можете подолати все це з самого початку. Коли ви запускаєте geditз терміналу, додайте &до кінця команди, щоб щось подібне gedit /path/to/file &. Це запуститься geditу фоновому режимі з першого місця (можливо, вам доведеться натиснути Enterпару разів, щоб повернути керування консоллю).

Додатково : якщо ви дотримувались цих додаткових приміток, ви, можливо, помітили, що вдруге ви це зробили jobs, ви могли бачити, що баш додав a &в кінці geditкоманди.

Як тільки ви звикнете до цієї системи, ви можете помітити, що якщо ви закриєте термінал, gedit також припиниться, навіть без діалогового вікна підтвердження. Щоб цього не сталося, запустіть disown, який від'єднає процес gedit від терміналу, видаливши його зі списку, поверненого jobs.


2
Мене завжди дивує, що немає ніякого способу негайно виділити процес, який працює на передньому плані. Ви повинні зробити паузу це перше, що іноді не життєздатний.
detly

@ читайте частину "Можна перемогти ..." ще раз!
guntbert

@guntbert - Не допомагає, якщо процес вже запущений ...
detly

44

Просто введіть:

gedit <filename-to-edit> &

Це негайно поверне вам командний рядок.


5
Це важлива ідіома Unix, і її варто знати. Будь-яка команда може бути запущена у фоновому режимі таким чином. Інтерактивні інструменти, очевидно, будуть заплутані в цій обробці, але, наприклад, bubortort war_and_peace.txt% дозволить вашому сортувальнику відкрутити шедевр (на довгий і тривалий час), поки ви продовжите свою роботу (скажімо, впроваджуючи quicksort чи щось)
Йон Кіпарський

1
@JonKiparsky Кумедний приклад - все одно.
Джо

25

Ви можете використовувати ці дані, nohupщоб не допустити приєднання графічного інтерфейсу до терміналу:

nohup mupdf some.pdf &

Це дозволить вам закрити термінал, з якого ви запускаєте, без закриття програми.

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

nohup mupdf some.pdf &>/dev/null &

4
"nohup" означає "немає повісити". Це відноситься до раннього Unix, коли (фізичні) термінали регулярно підключалися через телефонні лінії, і тому ви закрили термінал, повісивши телефон.
MSalters

3
Додаткова інформація: Команда nohup створить файл, nohup.outщо містить вихід з команди. Це корисно, якщо ви хочете переглянути повідомлення про помилки. Якщо ви не хочете, щоб файл створювався, додайте перенаправлення так:nohup mupdf some.pdf &>/dev/null &
Paddy Landau

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специфічним.

Ця публікація в блозі досить добре пояснює обидва методи.

Сторінка людини для відмови


Ярлик: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

Закінчення команди на &в bash запускає цю команду у фоновому режимі. Однак цей процес все ще приєднаний до терміналу.

Без disown, якщо закрити термінал, Gedit буде закрито, навіть не пропонує зберегти відредагований файл. disownвід'єднує фоновий процес від поточного терміналу, так що якщо ви закриєте термінал, gedit продовжить працювати як звичайно. Виявляється, я помилявся, це не стосується bash, але це справа для zsh. Вам все одно потрібно бігати detachпісля занять ctrl- zі bg, хоча, навіть у баш.

Ви можете дізнатися більше про вбудованих модулях jobs, disownі &метасимвол в сторінках керівництва для bashкомандиПіктограма manpage , особливо в розділі під назвою «Контроль роботи».


з disownя зміг тримати відкритий gedit після закриття терміналу. Я не зрозумів, що ви сказали про "це не стосується баш, але це справа для zsh"
KrIsHnA

0

Це, мабуть, тому, що ви відкрили gedit через термінал. Коли ви це зробите, ви побачите вихід командного рядка, який, як правило, приховано, якщо його запустити через GUI. Найкращий спосіб виправити це - відкрити нове вікно терміналу. Інший стане доступним після закриття gedit. Ви також можете використовувати перемикач, запропонований вище користувачем.


Нове вікно терміналу просто захаращує робочий стіл, навіть якщо воно мінімізоване. Використовувати & з відхиленням або без нього набагато простіше і чистіше.
Джо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.