geditコマンドの実行中に端末を使用できません


44

最近、12.04をインストールしました。gedit
ファイルを編集しようとすると、編集ファイルを閉じるか、新しいターミナルを開くまで、ターミナルを使用できません。しかし、11.04ではこの問題はなかったと思いますが、よくわかりません。 とにかくこれを回避し、ファイルの編集中に同じターミナルを使用する方法はありますか。

回答:


80

簡潔な答え

応答しない端末で:

  1. ヒットCtrl+ Z
  2. 入力bgして入力します。
  3. 入力disownして入力します。

ロングアンサー

応答しない端末でCtrl+をZ押すと、プロセス(または「ジョブ」)が「一時停止」され、コンソールコントロールが返されます。ただし、それはgedit応答しなくなり、使用できなくなります。

Extra:必要に応じて、コマンドを実行できjobsます。コマンドに対してStoppedと表示されることがわかります。そのため、gedit使用できません。

バックグラウンドでジョブを正常に実行するには(つまり、gedit再度応答するようにするには)、コマンドを実行しますbg(バックグラウンドを意味します)。これgeditで、を使用できるようになり、同時にプロンプ​​トが表示されます。

エクストラ:あなたが実行した場合、今、jobsあなたはそれを読んであげることがわかります実行します

このすべてを最初から克服できます。geditターミナルから起動するとき&、コマンドの最後にを追加しgedit /path/to/file &ます。このようになります。これはgedit最初からバックグラウンドで起動します(Enterコンソールの制御を取り戻すために数回押す必要があるかもしれません)。

Extra:これらの追加のメモに従っている場合、2回目に行ったときにjobs、bash &geditコマンドの末尾にa を追加したことがわかります。

このシステムに慣れると、ターミナルを閉じると、確認ダイアログなしでもgeditが終了することに気付くかもしれません。これを防ぐには、を実行しますdisown。これにより、geditプロセスが端末から切り離され、によって返されるリストから削除されjobsます。


2
フォアグラウンドで実行されているプロセスをすぐにバックグラウンドにする方法がないことは、いつも驚きです。最初に一時停止する必要がありますが、実行できない場合があります。
確実に

@detlyもう一度「あなたは克服できます...」の部分を読んでください!
ガントベルト

@guntbert-プロセスが既に実行されている場合は役に立たない
...-確かに

44

入力するだけです:

gedit <filename-to-edit> &

これにより、コマンドプロンプトがすぐに返されます。


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 &

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特定のものであることに注意してください。

このブログ投稿では、両方の方法を非常によく説明しています。

disownのmanページ


ショートカット: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には、それに関する多くのスレッドがあります。別の名前のエイリアスを使用しても構いません。簡単に言えば、既存のコマンドのエイリアスは、他の誰かがそれを使用した場合(他の問題の修正を支援する場合など)、マシン上で予期しない動作を引き起こし、それらのエイリアスとコマンドなしで別のシステムを使用すると同じことをします期待どおりに動作しません。このためのポスターの子の1つは、エイリアスrm = 'rm -i'です。常に存在するとは限らない2回目のチャンスで、物事を削除することに慣れます。
ジョー

10

入力するだけです:

gedit FILENAME & disown

&in bashでコマンドを終了すると、そのコマンドがバックグラウンドで実行されます。ただし、そのプロセスはまだ端末に接続されています。

なしdisownで、ターミナルを閉じると、編集されたファイルを保存するように促すことなく、geditが閉じます。disown現在のターミナルからバックグラウンドプロセスを切り離します。そのため、ターミナルを閉じてもgeditは通常どおり実行されます。私は間違っていたことが判明しました、これはbashの場合ではありませんが、zshの場合です。あなたはまだ実行する必要がdetach行った後にctrl- zbgさえbashで、しかし、。

ビルトインjobsdisownおよびコマンド&マンページbashマンページアイコンのメタキャラクター、特に「ジョブ制御」とラベル付けされたセクションの詳細を確認できます。


disown私は、端末クローズ後に開いてgeditを維持することができました。「これはbashには
当てはまり

0

これはおそらく、ターミナルからgeditを開いたためです。これを行うと、GUIから起動した場合は通常非表示になっているコマンドライン出力が表示されます。これを修正する最善の方法は、新しいターミナルウィンドウを開くことです。もう1つは、geditが終了すると使用可能になります。上記のユーザーが提案したスイッチを使用することもできます。


新しい端末ウィンドウは、デスクトップが最小化されていても、散らかるだけです。否認の有無にかかわらず、&を使用する方がはるかに簡単でクリーンです。
ジョー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.