Làm cách nào để dán các lệnh vào TTY?


20

Tôi có một số lệnh và đường dẫn tệp khá dài mà tôi đã sao chép vào bảng tạm và cần thực thi trong TTY, tuy nhiên đường dẫn tệp quá dài để nhập lại và tôi chỉ muốn dán chúng vào sau $(Tôi có thể nhập lại các lệnh trước sau đó họ), có cách nào để làm điều này?

Vì vậy, tôi muốn thực thi một lệnh và để nó trên dòng tiếp theo bắt đầu bằng việc $đặt văn bản được sao chép vào bảng tạm như vậy:

$ specialCommandToPasteText
$ pastedText

Tôi đang chạy Ubuntu Gnome 16.04 với Gnome 3.20.


3
Dán các lệnh vào tập lệnh Bash trong trình soạn thảo văn bản, sau đó thực thi tập lệnh từ TTY?
Nick Weinberg

@NickWeinberg: Không thực sự là một lựa chọn, đây là tất cả trong CLI và các chương trình tôi đang chạy ở đó chỉ có khả năng sao chép.

2
Bạn đang sao chép chúng từ chương trình nào?
Nick Weinberg

Bạn có đang sử dụng gpmđể cung cấp hỗ trợ chuột trong VT, như được đề xuất trong câu trả lời của riêng bạn cho câu hỏi trước không?
Steeldo

1
Một giải pháp khả thi là sử dụng chức năng sao chép / dán trong tmux hoặc màn hình
Nick Weinberg

Câu trả lời:


28

Thật đơn giản, nhưng bạn cần một công cụ bổ sung.

  1. Cài đặt gói xselcung cấp một lệnh dễ dàng để truy cập vào bảng tạm:

    sudo apt-get install xsel
    
  2. Tìm hiểu xem $DISPLAYmáy tính để bàn của bạn đang sử dụng. Thông thường nó phải như vậy :0, nhưng bạn có thể kiểm tra nó bằng cách chạy lệnh này trong trình giả lập thiết bị đầu cuối trên màn hình GUI của bạn:

    echo $DISPLAY
    

    Tôi sẽ giả sử đầu ra là :0, thay thế bằng đầu ra thực tế của bạn trong các lệnh sau nếu nó khác.

  3. Sao chép lệnh bạn muốn thực thi trong TTY, ví dụ: sử dụng Ctrl+ C.

  4. Chuyển sang TTY bạn muốn sử dụng, ví dụ: TTY1 bằng Ctrl+ Alt+ F1.
    Đăng nhập bằng cách nhập tên người dùng và mật khẩu của bạn.

  5. Nhập lệnh đầy đủ bạn muốn chạy, nhưng thay thế phần bạn muốn chèn từ bảng ghi tạm bằng $(DISPLAY=:0 xsel -ob).

    Ví dụ: nếu bạn đã sao chép một danh sách lớn các gói để cài đặt, bạn có thể nhập gói này vào TTY:

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

    Đoạn mã clipboard không nhất thiết phải ở cuối lệnh của bạn, mặc dù vậy, nó có thể xuất hiện ở bất cứ đâu.


Để đơn giản hóa mọi thứ hơn nữa, hãy chuyển điều này vẫn hơi phức tạp DISPLAY=:0 xsel -obsang một tập lệnh. Tôi sẽ đặt tên cho nó PASTE(vì pasteđã được sử dụng), nhưng bạn cũng có thể gọi nó theo cách khác.

Để tạo tệp tập lệnh ở một vị trí nơi mọi người dùng có thể chạy nó mà không phải chỉ định đường dẫn đầy đủ (tôi khuyên bạn nên /usr/local/binlàm điều này) và để làm cho nó có thể thực thi được, chỉ cần chạy hai lệnh đó:

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

Bây giờ bạn có thể chỉ cần nhúng $(PASTE)vào các lệnh của mình trên TTY để chèn nội dung clipboard từ máy tính để bàn của bạn vào đó.


2
Cảm ơn! Điều này sẽ giúp tôi với nhiều thứ hơn bây giờ so với những gì tôi đã hỏi ban đầu! :)

1
Bạn thậm chí có thể lưu trữ DISPLAY=:0 xsel -obdưới dạng bí danh Bash hoặc tập lệnh nhỏ ở bất cứ đâu (hãy đặt tên cho nó PASTE) và chỉ sử dụng một hình thức rút gọn như $(PASTE)sử dụng nội dung clipboard trong các lệnh của bạn.
Chỉ huy Byte

Cách tiếp cận rất hay
Sergiy Kolodyazhnyy

21

Cá nhân, tôi chỉ sử dụng các tập tin văn bản:

  1. Trong môi trường máy tính để bàn của bạn, hãy mở một thiết bị đầu cuối và

    echo "whatever long text you have copied" > file
    
  2. Thả đến tty và

    $(cat file)
    

2
Điều này là tốt để biết. Tôi thực sự đã không nghĩ rằng một lệnh đơn giản như thế này sẽ hoạt động tốt như vậy. Đôi khi tâm trí chỉ nghĩ quá phức tạp. Cảm ơn bạn! =)
Terrance

1
Tôi chỉ sử dụng some-command 'shift + insert (để dán). 'trở về. Dán bên trong dấu ngoặc đơn hoặc dấu ngoặc kép ngăn dòng mới trong văn bản được dán chạy lệnh trước khi tôi có thể chỉnh sửa nó để khắc phục bất kỳ vấn đề nào. IDK những gì nó đạt được bạn để đặt văn bản trong một tập tin. Bash có tổ hợp phím chỉnh sửa dòng rất mạnh, như mũi tên ctrl-trái hoặc ctrl-phải để di chuyển bằng từ. alt-backspace để xóa các từ ngược. Alt-d để xóa các từ chuyển tiếp, v.v.
Peter Cordes

Ồ, tôi mới nhận ra rằng OP có nghĩa là bảng điều khiển văn bản VT khi anh ấy nói TTY. Ai đó thực sự nên chỉnh sửa câu hỏi, bởi vì mọi thiết bị đầu cuối bạn có thể chạy shell là một tty, bao gồm các thiết bị đầu cuối giả được điều khiển bởi các chương trình giống như xterm.
Peter Cordes

@PeterCordes yeah, nhưng thuật ngữ "tty" thường, nếu không chính xác, được sử dụng để chỉ các bảng điều khiển ảo.
terdon

4

Một cách giải quyết khác có thể không được liệt kê ở trên liên quan đến việc sử dụng vim, dán và chạy :!unix_commandtrong chế độ lệnh:

  1. sao chép các lệnh và đường dẫn đến clipboard
  2. mở vim, vào chế độ lệnh Esc, nhập dấu nhắc:
  3. gõ một tiếng nổ ! và sau đó dán Ctrl+ Shift+ Vlệnh bạn đã sao chép trước đó trong dấu nhắc và thực thi
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.