จะวางคำสั่งลงใน TTY ได้อย่างไร


20

ฉันมีคำสั่งและพา ธ ไฟล์ที่ค่อนข้างยาวซึ่งฉันได้คัดลอกไปยังคลิปบอร์ดและจำเป็นต้องดำเนินการใน TTY แต่เส้นทางไฟล์ยาวเกินไปที่จะพิมพ์อีกครั้งและฉันต้องการที่จะวางพวกเขาในภายหลัง$(ฉันสามารถพิมพ์คำสั่งก่อนหน้า พวกเขา) มีวิธีทำเช่นนี้หรือไม่?

ดังนั้นฉันต้องการที่จะรันคำสั่งและมีมันในบรรทัดถัดไปเริ่มต้นด้วยการ$ใส่ข้อความที่คัดลอกไปยังคลิปบอร์ดดังนี้:

$ specialCommandToPasteText
$ pastedText

ฉันใช้ Ubuntu GNOME 16.04 กับ GNOME 3.20


3
วางคำสั่งลงในสคริปต์ Bash ในเท็กซ์เอดิเตอร์จากนั้นเรียกใช้สคริปต์จาก TTY?
Nick Weinberg

@NickWeinberg: ไม่ใช่ตัวเลือกจริงๆนี่คือทั้งหมดใน CLI และโปรแกรมที่ฉันใช้ที่นั่นมีความสามารถในการคัดลอกเท่านั้น

2
คุณกำลังคัดลอกโปรแกรมใดอยู่
Nick Weinberg

คุณใช้gpmเพื่อให้การสนับสนุนเมาส์ใน VT ตามที่แนะนำในคำตอบของคุณสำหรับคำถามก่อนหน้านี้หรือไม่?
ขับเหล็ก

1
ทางออกหนึ่งที่เป็นไปได้คือการใช้ฟังก์ชั่นการคัดลอก / วางในtmuxหรือหน้าจอ
Nick Weinberg

คำตอบ:


28

มันง่าย แต่คุณต้องการเครื่องมือเพิ่มเติม

  1. ติดตั้งแพคเกจxselที่ให้คำสั่งง่ายๆในการเข้าถึงคลิปบอร์ด:

    sudo apt-get install xsel
    
  2. ค้นหา$DISPLAYเดสก์ท็อปของคุณที่ใช้อยู่ โดยปกติแล้วควรจะเป็น:0แต่คุณสามารถตรวจสอบได้โดยใช้คำสั่งนี้ใน terminal emulator บนเดสก์ท็อป GUI ของคุณ:

    echo $DISPLAY
    

    ฉันจะถือว่าผลลัพธ์คือ:0แทนที่ด้วยเอาต์พุตจริงของคุณในคำสั่งต่อไปนี้หากมันแตกต่างกัน

  3. คัดลอกคำสั่งที่คุณต้องการที่จะดำเนินการใน TTY เช่นใช้+CtrlC

  4. สลับไป TTY ที่คุณต้องการใช้งานเช่นการใช้ tty1 Ctrl+ +Alt เข้าสู่ระบบโดยพิมพ์ชื่อผู้ใช้และรหัสผ่านของคุณF1

  5. ป้อนคำสั่งเต็มรูปแบบที่คุณต้องการที่จะทำงาน $(DISPLAY=:0 xsel -ob)แต่แทนที่ส่วนที่คุณต้องการแทรกจากคลิปบอร์ดด้วย

    ตัวอย่างเช่นหากคุณคัดลอกรายการแพคเกจขนาดใหญ่เพื่อติดตั้งคุณสามารถพิมพ์สิ่งนี้ลงใน TTY:

    sudo apt-get update && sudo apt-get install $(DISPLAY=:0 xsel -ob)
    

    ตัวอย่างคลิปบอร์ดไม่จำเป็นต้องอยู่ท้ายคำสั่งของคุณ แต่อาจปรากฏขึ้นที่ใดก็ได้


หากต้องการทำให้สิ่งต่าง ๆ ง่ายขึ้นเราจะย้ายDISPLAY=:0 xsel -obสคริปต์นี้ยังซับซ้อนไปหน่อย ฉันจะตั้งชื่อมันPASTE(เพราะpasteถูกใช้ไปแล้ว) แต่คุณสามารถเรียกมันแตกต่างกันได้

ในการสร้างไฟล์สคริปต์ในตำแหน่งที่ผู้ใช้ทุกคนสามารถรันได้โดยไม่ต้องระบุพา ธ เต็ม (ฉันแนะนำ/usr/local/binสำหรับสิ่งนี้) และเพื่อให้สามารถเรียกใช้งานได้เพียงแค่เรียกใช้สองคำสั่ง:

( echo '#!/bin/bash' && echo 'DISPLAY=:0 xsel -ob' ) | sudo tee /usr/local/bin/PASTE
sudo chmod +x /usr/local/bin/PASTE

ตอนนี้คุณสามารถฝัง$(PASTE)คำสั่งลงใน TTY เพื่อแทรกเนื้อหาของคลิปบอร์ดจากเดสก์ท็อปของคุณที่นั่น


2
ขอบคุณ! สิ่งนี้จะช่วยฉันได้หลายสิ่งมากกว่าที่ฉันถามตอนแรก! :)

1
คุณสามารถเก็บDISPLAY=:0 xsel -obเป็นนามแฝงทุบตีหรือสคริปต์ขนาดเล็กที่ใดก็ได้ (ลองตั้งชื่อPASTE) และใช้รูปแบบที่สั้นลงเท่านั้นเช่น$(PASTE)ใช้เนื้อหาคลิปบอร์ดในคำสั่งของคุณ
ผู้บัญชาการ Byte

วิธีการที่ดีมาก
Sergiy Kolodyazhnyy

21

ส่วนตัวฉันใช้ไฟล์ข้อความ:

  1. ในสภาพแวดล้อมเดสก์ท็อปของคุณเปิดเทอร์มินัลและ

    echo "whatever long text you have copied" > file
    
  2. วางที่ tty และ

    $(cat file)
    

2
นี่เป็นเรื่องดีที่จะรู้ จริง ๆ แล้วฉันไม่คิดว่าคำสั่งง่ายๆเช่นนี้จะทำงานได้ดี บางครั้งจิตใจก็คิดว่าซับซ้อนเกินไป ขอขอบคุณ! =)
Terrance

1
ฉันใช้some-command 'shift + insert (เพื่อวาง) 'กลับ การวางในเครื่องหมายคำพูดเดี่ยวหรือคู่จะป้องกันการขึ้นบรรทัดใหม่ในข้อความที่วางจากการรันคำสั่งก่อนที่ฉันจะสามารถแก้ไขได้เพื่อแก้ไขปัญหาใด ๆ IDK สิ่งที่คุณจะได้รับจากการใส่ข้อความในไฟล์ Bash มีการกดปุ่มแก้ไขบรรทัดที่มีประสิทธิภาพมากเช่นลูกศร ctrl-left หรือ ctrl-right เพื่อเลื่อนไปตามคำ alt-backspace เพื่อลบคำหลัง Alt-d เพื่อลบคำพูดไปข้างหน้า ฯลฯ ฯลฯ
Peter Cordes

โอ้ฉันเพิ่งพบว่า OP หมายถึง text console VT เมื่อเขาพูดว่า TTY บางคนควรแก้ไขคำถามเพราะเทอร์มินัลทุกตัวที่คุณสามารถใช้เชลล์คือ tty รวมถึงเทอร์มินัลหลอกที่ควบคุมด้วยโปรแกรมที่คล้ายกับ xterm
ปีเตอร์กอร์เดส

@PeterCordes ใช่ แต่คำว่า "tty" มักจะหากไม่ถูกต้องใช้ในการอ้างถึงคอนโซลเสมือน
terdon

4

วิธีแก้ปัญหาอื่นที่อาจเป็นไปได้ซึ่งไม่ได้ระบุไว้ข้างต้นเกี่ยวข้องกับการใช้การvimวางและการใช้งาน:!unix_commandในโหมดคำสั่ง:

  1. คัดลอกคำสั่งและเส้นทางไปยังคลิปบอร์ด
  2. เปิดvimไปที่โหมดคำสั่งEscป้อนพรอมต์:
  3. พิมพ์ปัง! แล้ววางCtrl+ Shift+ Vคำสั่งที่คุณคัดลอกไว้ก่อนหน้านี้ในพรอมต์และดำเนินการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.