ฉันใช้เทอร์มินัลไม่ได้ในขณะที่คำสั่ง gedit กำลังทำงาน


44

ฉันเพิ่งติดตั้ง 12.04
เมื่อฉันพยายามแก้ไขไฟล์ด้วยgeditฉันไม่สามารถใช้เทอร์มินัลได้จนกว่าฉันจะปิดไฟล์แก้ไขหรือฉันต้องเปิดเทอร์มินัลใหม่ แต่ฉันคิดว่าฉันไม่ได้มีปัญหากับ 11.04 แต่ฉันไม่แน่ใจ
มีอยู่แล้วเพื่อหลีกเลี่ยงปัญหานี้และใช้เทอร์มินัลเดียวกันขณะแก้ไขไฟล์

คำตอบ:


80

คำตอบสั้น ๆ

ในเทอร์มินัลที่ไม่ตอบสนอง:

  1. ตี+CtrlZ
  2. พิมพ์bgและป้อน
  3. พิมพ์disownและป้อน

คำตอบยาว

ในเทอร์มินัลที่ไม่ตอบสนองกดCtrl+ Zนี่จะ "หยุด" กระบวนการ (หรือ "งาน") และส่งคืนการควบคุมคอนโซลให้กับคุณ อย่างไรก็ตามคุณจะสังเกตเห็นว่าgeditไม่ตอบสนองและไม่สามารถใช้งานได้

พิเศษ : ถ้าคุณต้องการคุณสามารถรันคำสั่งjobsคุณจะสังเกตเห็นว่ามันจะอ่านคำสั่งหยุดสำหรับgeditคำสั่งนั่นเป็นสาเหตุที่คุณไม่สามารถใช้มันได้

เพื่อให้งานรันในพื้นหลังสำเร็จ (เช่นเพื่อgeditตอบสนองอีกครั้ง) ให้ดำเนินการคำสั่งbg(หมายถึงพื้นหลัง) ตอนนี้คุณจะสามารถใช้งานgeditได้และในเวลาเดียวกันก็มีพรอมต์ให้กับตัวเอง

พิเศษ : ตอนนี้ถ้าคุณรันjobsคุณจะสังเกตเห็นว่ามันจะอ่านRunning

คุณสามารถเอาชนะทั้งหมดนี้ได้ตั้งแต่เริ่มต้น เมื่อคุณกำลังเปิดตัวgeditจากท่าเรือเพิ่มไปยังจุดสิ้นสุดของคำสั่งเพื่ออะไรเช่นนี้& gedit /path/to/file &สิ่งนี้จะเปิดgeditในพื้นหลังตั้งแต่แรก (คุณอาจต้องกดEnterสองสามครั้งเพื่อรับการควบคุมคอนโซลด้านหลัง)

พิเศษ : หากคุณติดตามบันทึกย่อพิเศษเหล่านี้คุณอาจสังเกตเห็นว่าครั้งที่สองที่คุณทำjobsคุณจะเห็นว่าทุบตีเพิ่มคำสั่ง&ท้ายgeditคำสั่ง

เมื่อคุณคุ้นเคยกับระบบนี้แล้วคุณอาจสังเกตเห็นว่าหากคุณปิดเครื่องเทอร์มินัล gedit จะยุติลงโดยไม่ต้องมีกล่องโต้ตอบการยืนยัน เพื่อป้องกันไม่ให้เกิดเหตุการณ์เช่นนี้เรียกใช้disownซึ่งจะแยกกระบวนการของ gedit jobsจากสถานีลบออกจากรายการที่ส่งกลับโดย


2
มันทำให้ฉันประหลาดใจอยู่เสมอว่าไม่มีวิธีใดที่จะทำให้กระบวนการที่ทำงานอยู่เบื้องหน้าได้ในทันที คุณต้องหยุดมันก่อนซึ่งบางครั้งอาจไม่สามารถทำงานได้
Detly

@detly อ่านส่วน "คุณสามารถเอาชนะ ... " อีกครั้ง!
guntbert

@guntbert - ไม่ช่วยถ้ากระบวนการกำลังทำงานอยู่ ...
detly

44

เพียงพิมพ์:

gedit <filename-to-edit> &

สิ่งนี้จะส่งคืนพรอมต์คำสั่งให้คุณทันที


5
นี่เป็นสำนวนที่สำคัญและน่ารู้ คำสั่งใด ๆ สามารถทำงานในพื้นหลังด้วยวิธีนี้ เครื่องมือที่มีการโต้ตอบอย่างชัดเจนจะสับสนกับการรักษานี้ แต่อย่างเช่น bubbleort war_and_peace.txt% จะทำให้ตัวเรียงลำดับของคุณหมุนไปที่ผลงานชิ้นเอก (เป็นเวลานานนาน) ในขณะที่คุณทำงาน หรืออะไรก็ได้)
Jon Kiparsky

1
@JonKiparsky ตัวอย่างที่น่าขบขัน - ทำให้เป็นประเด็น
Joe

25

คุณสามารถใช้nohupเพื่อป้องกันไม่ให้ GUI เชื่อมต่อกับเทอร์มินัล:

nohup mupdf some.pdf &

สิ่งนี้จะช่วยให้คุณปิดเทอร์มินัลที่คุณเปิดใช้โดยไม่ต้องปิดโปรแกรม

คุณควรสังเกตด้วยว่าคำสั่ง nohup จะสร้างไฟล์ด้วยstdoutและstderrจากคำสั่งที่คุณเรียกใช้ หากคุณต้องการที่จะป้องกันไม่ให้เพิ่มก่อน&>/dev/null&

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

4
"nohup" ย่อมาจาก "no hangup" วันนี้กลับไปสู่ ​​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เฉพาะเจาะจง

โพสต์บล็อกนี้อธิบายทั้งสองวิธีค่อนข้างดี

หน้า 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 การใช้นามแฝงที่มีชื่ออื่นนั้นเป็นเรื่องปกติ สรุปคำสั่งการใช้นามแฝงที่มีอยู่จะสร้างพฤติกรรมที่ไม่คาดคิดในเครื่องของคุณถ้ามีคนอื่นเคยใช้มัน (เช่นเมื่อพยายามช่วยคุณแก้ไขปัญหาอื่น ๆ ) และมันทำสิ่งเดียวกันกับคุณเมื่อคุณใช้ระบบอื่นโดยไม่มีนามแฝงเหล่านั้น ไม่ทำงานอย่างที่คุณคาดหวัง เด็กโปสเตอร์คนนี้คือ alias rm = 'rm -i' มันทำให้คุณคุ้นเคยกับการลบสิ่งต่าง ๆ ด้วยโอกาสครั้งที่สองที่ไม่ได้อยู่ที่นั่นเสมอไป
Joe

10

เพียงพิมพ์:

gedit FILENAME & disown

การสิ้นสุดคำสั่งด้วย&in bash จะรันคำสั่งนั้นในพื้นหลัง อย่างไรก็ตามกระบวนการดังกล่าวยังคงเชื่อมต่อกับเทอร์มินัล

หากไม่มีdisownถ้าคุณปิดเทอร์มินัล gedit จะปิดโดยไม่แจ้งให้คุณบันทึกไฟล์ที่แก้ไข disownแยกกระบวนการพื้นหลังออกจากเทอร์มินัลปัจจุบันดังนั้นหากคุณปิดเทอร์มินัล gedit จะยังคงทำงานตามปกติ ปรากฎว่าฉันผิดนี่ไม่ใช่กรณีสำหรับทุบตี แต่เป็นกรณีสำหรับ zsh คุณยังต้องวิ่งdetachหลังจากทำctrl- zและbgถึงแม้จะอยู่ในการทุบตี

คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับการสร้างอินjobs, disownและ&metacharacter ในmanpage สำหรับbashคำสั่งไอคอน Manpageโดยเฉพาะอย่างยิ่งในส่วนที่ระบุว่า "การควบคุมงาน"


กับdisownฉันก็สามารถที่จะทำให้ gedit เปิดหลังจากปิดสถานี ฉันไม่ได้รับสิ่งที่คุณพูดเกี่ยวกับ "กรณีนี้ไม่ได้สำหรับการทุบตี แต่มันเป็นกรณีสำหรับ zsh"
กฤษณะ

0

อาจเป็นเพราะคุณเปิด gedit ผ่านเทอร์มินัล เมื่อคุณทำเช่นนี้คุณจะเห็นเอาต์พุตบรรทัดคำสั่งที่ปกติจะถูกซ่อนหากเริ่มต้นผ่าน GUI วิธีที่ดีที่สุดในการแก้ไขปัญหานี้คือการเปิดหน้าต่างเทอร์มินัลใหม่ ส่วนอื่น ๆ จะพร้อมใช้งานหลังจากปิด gedit คุณยังสามารถใช้สวิตช์ตามที่ผู้ใช้ข้างต้นแนะนำ


หน้าต่างเทอร์มินัลใหม่เพียงแค่ตัดเดสก์ท็อปแม้ว่ามันจะถูกย่อให้เล็กสุด การใช้ & ไม่ว่าจะปฏิเสธหรือไม่นั้นง่ายและสะอาดกว่ามาก
Joe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.