Tôi không thể sử dụng thiết bị đầu cuối trong khi lệnh gedit đang chạy


44

Gần đây tôi đã cài đặt 12.04.
Khi tôi cố gắng chỉnh sửa tệp bằng gedit , tôi không thể sử dụng thiết bị đầu cuối cho đến khi tôi đóng tệp chỉnh sửa hoặc tôi phải mở một thiết bị đầu cuối mới. Nhưng tôi nghĩ rằng tôi đã không gặp vấn đề này với 11.04, tuy nhiên tôi không chắc chắn.
Có cách nào để tránh điều này và sử dụng cùng một thiết bị đầu cuối trong khi chỉnh sửa tập tin.

Câu trả lời:


80

Câu trả lời ngắn

Trong thiết bị đầu cuối không phản hồi:

  1. Lượt Ctrl+ Z.
  2. Nhập bgvà nhập.
  3. Nhập disownvà nhập.

Câu trả lời dài

Trong thiết bị đầu cuối không phản hồi, nhấn Ctrl+ Z, điều này sẽ "tạm dừng" quá trình (hoặc "công việc") và trả lại điều khiển bảng điều khiển cho bạn. Tuy nhiên, bạn sẽ nhận thấy rằng nó geditkhông phản hồi và bạn không thể sử dụng nó.

Thêm : nếu bạn muốn, bạn có thể thực thi lệnh jobs, bạn sẽ nhận thấy rằng nó sẽ đọc Ngừng cho geditlệnh, đó là lý do tại sao bạn không thể sử dụng nó.

Để thực hiện công việc chạy thành công trong nền (nghĩa là thực hiện geditlại phản hồi), hãy thực hiện lệnh bg(có nghĩa là nền). Bây giờ bạn sẽ có thể sử dụng gedit, đồng thời có lời nhắc cho chính mình.

Thêm : bây giờ, nếu bạn thực thi jobs, bạn sẽ nhận thấy rằng nó sẽ đọc Chạy .

Bạn có thể vượt qua tất cả những điều này ngay từ đầu. Khi bạn khởi chạy gedittừ thiết bị đầu cuối, hãy thêm một &vào cuối lệnh, vì vậy một cái gì đó như thế này gedit /path/to/file &. Điều này sẽ khởi chạy gedittrong nền từ vị trí đầu tiên (bạn có thể cần phải nhấn Entermột vài lần để điều khiển bàn điều khiển trở lại).

Thêm : nếu bạn đang theo dõi các ghi chú thêm này, bạn có thể nhận thấy rằng lần thứ hai bạn đã làm jobs, bạn có thể thấy bash đó đã thêm một &vào cuối geditlệnh.

Khi bạn đã quen với hệ thống này, bạn có thể nhận thấy rằng nếu bạn đóng thiết bị đầu cuối, gedit cũng sẽ chấm dứt, thậm chí không có hộp thoại xác nhận. Để ngăn điều này xảy ra, hãy chạy disown, nó sẽ tách quá trình gedit khỏi thiết bị đầu cuối, loại bỏ nó khỏi danh sách được trả về jobs.


2
Điều đó luôn làm tôi ngạc nhiên rằng không có cách nào để ngay lập tức tạo nền cho một quá trình đang chạy ở phía trước. Bạn phải tạm dừng nó trước, điều này đôi khi không khả thi.
gièm pha

@detly đọc phần "Bạn có thể vượt qua ..." một lần nữa!
guntbert

@guntbert - Không giúp gì nếu quy trình đang chạy ...
gièm pha

44

Chỉ loại:

gedit <filename-to-edit> &

Điều này sẽ ngay lập tức trả lại dấu nhắc lệnh cho bạn.


5
Đây là một thành ngữ unix quan trọng, và đáng để biết. Bất kỳ lệnh nào có thể được chạy trong nền theo cách này. Các công cụ tương tác rõ ràng sẽ bị nhầm lẫn bởi cách xử lý này, nhưng ví dụ như bubbleort war_and_peace.txt% sẽ cho phép trình sắp xếp của bạn quay vòng trong kiệt tác (trong một thời gian dài) trong khi bạn tiếp tục với công việc của mình (giả sử, thực hiện quicksort hoặc một cái gì đó)
Jon Kiparsky

1
@JonKiparsky Ví dụ gây cười - không đưa ra quan điểm.
Joe

25

Bạn có thể sử dụng nohupđể ngăn GUI được gắn vào thiết bị đầu cuối:

nohup mupdf some.pdf &

Điều này sẽ cho phép bạn đóng thiết bị đầu cuối mà bạn khởi chạy mà không cần đóng chương trình.

Bạn cũng nên lưu ý rằng lệnh nohup sẽ tạo một tệp có stdoutstderrlệnh bạn chạy. Nếu bạn muốn ngăn chặn điều đó, hãy thêm &>/dev/nulltrước &.

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

4
"Nohup" là viết tắt của "không treo lên". Điều này bắt nguồn từ Unix đầu tiên, khi các thiết bị đầu cuối (vật lý) thường được gắn qua đường dây điện thoại và do đó bạn sẽ đóng một thiết bị đầu cuối bằng cách cúp điện thoại.
MSalters

3
Thông tin bổ sung: Lệnh nohup sẽ tạo một tệp nohup.outchứa đầu ra từ lệnh. Điều này rất hữu ích nếu bạn muốn xem thông báo lỗi. Nếu bạn không muốn tệp được tạo, hãy thêm chuyển hướng như sau:nohup mupdf some.pdf &>/dev/null &
Paddy Landau

19

Bạn cũng có thể sử dụng disownlệnh. Nó đặc biệt hữu ích khi bạn đã bắt đầu quá trình bạn không còn muốn gắn vào thiết bị đầu cuối.

Thủ tục cơ bản nếu tôi nhớ chính xác, là một cái gì đó như thế này:

$ > 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!

Lưu ý rằng disown là bashcụ thể.

Bài đăng blog này giải thích cả hai phương pháp khá tốt.

Trang người đàn ông bị từ chối


Một lối tắt:firefox & disown
Flimm

13

Từ man gedit:

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

Vì vậy, nếu bạn chạy geditvới -btùy chọn, nó sẽ bắt đầu ở chế độ nền:

gedit -b [FILE-NAME]

Hơn nữa, tiếp theo bạn có thể tạo bí danh cho gedit -b(xem ở đây cách tạo bí danh vĩnh viễn):

alias gedit='gedit -b'

Từ bây giờ, trong tương lai bạn có thể sử dụng gedit [FILE-NAME]như bình thường và nó sẽ bắt đầu trong nền.


2
Đó là một ý tưởng tồi để sử dụng bí danh để xác định lại các lệnh phổ biến. Bạn sẽ tìm thấy rất nhiều chủ đề về nó trên stackexchange. Nó là tốt để sử dụng một bí danh với một tên khác. Tóm lại, việc đặt bí danh các lệnh hiện có sẽ tạo ra hành vi không mong muốn trên máy của bạn nếu có ai đó sử dụng nó (như khi cố gắng giúp bạn khắc phục một số vấn đề khác) và nó cũng làm điều tương tự với bạn khi bạn sử dụng hệ thống khác mà không có các bí danh và lệnh của bạn không làm việc như bạn mong đợi Một trong những đứa trẻ áp phích cho điều này là bí danh rm = 'rm -i'. Nó giúp bạn quen với việc xóa mọi thứ với cơ hội thứ hai không phải lúc nào cũng có.
Joe

10

Chỉ loại:

gedit FILENAME & disown

Kết thúc một lệnh với &trong bash chạy lệnh đó trong nền. Tuy nhiên, quá trình đó vẫn được gắn vào thiết bị đầu cuối.

Nếu không disown, nếu bạn đóng thiết bị đầu cuối, gedit sẽ đóng, thậm chí không nhắc bạn lưu tệp đã chỉnh sửa. disowntách quá trình nền từ thiết bị đầu cuối hiện tại, để nếu bạn đóng thiết bị đầu cuối, gedit sẽ tiếp tục chạy như bình thường. Hóa ra tôi đã sai, đây không phải là trường hợp của bash, nhưng đó là trường hợp của zsh. Bạn vẫn cần phải chạy detachsau khi thực hiện ctrl- zbg, mặc dù, ngay cả trong bash.

Bạn có thể tìm hiểu thêm về các built-in jobs, disown&metacharater trong manpage cho bashlệnhBiểu tượng trang , đặc biệt là phần có nhãn "kiểm soát công việc".


với disowntôi đã có thể giữ cho gedit mở sau khi đóng thiết bị đầu cuối. Tôi đã không hiểu những gì bạn nói về "đây không phải là trường hợp của bash, nhưng đó là trường hợp của zsh"
KrIsHnA

0

Điều này có thể là do bạn đã mở gedit thông qua thiết bị đầu cuối. Khi bạn làm điều này, bạn sẽ thấy đầu ra dòng lệnh thường bị ẩn nếu được khởi động thông qua GUI. Cách tốt nhất để khắc phục điều này là mở một cửa sổ terminal mới. Cái khác sẽ trở nên có sẵn sau khi gedit đóng cửa. Bạn cũng có thể sử dụng công tắc mà người dùng đề xuất ở trên.


Một cửa sổ thiết bị đầu cuối mới chỉ đóng cửa máy tính để bàn, ngay cả khi nó được thu nhỏ. Sử dụng & có hoặc không có từ chối đơn giản và sạch sẽ hơn nhiều.
Joe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.