2008-11-23 64 views
25

Tôi muốn sử dụng một phần của đầu ra của một lệnh chạy từ dòng lệnh trong xterm khác, hoặc như một phần của một lệnh khác. Ví dụ:Làm cách nào để sao chép văn bản từ xterm của tôi mà không cần chuột?

> grep error error.log 
error: can't find file ~/<some very long path>/thisfile 

và tôi muốn làm điều này:

>ls ~/<some very long path>/ 

Tôi biết hai cách để làm điều này:
1. Bản sao ~/<some very long path>/ với chuột.
2. Sử dụng kết hợp một số head/tail/awk/sed/perl/cut/etc ... chỉ để trích xuất những gì tôi cần từ đầu ra và sau đó sử dụng rằng backticks bên trong.

Có cách nào để sao chép văn bản mà không cần sử dụng chuột không? Ví dụ mà tôi nghĩ đến là chế độ trực quan bên trong VIM, nhưng tôi không biết làm thế nào để làm điều đó bên trong xterm.

+0

Các câu hỏi liên quan/indentical ở nơi khác: http://superuser.com/q/555886/128768; http://stackoverflow.com/q/1536757/1172302; http://superuser.com/q/228236/128768 –

Trả lời

37

Bạn có thể sử dụng lệnh sao chép và dán của màn hình GNU.

nhanh hướng dẫn:

  1. mở màn hình: screen (hoặc screen myprog my args here)
  2. Chạy chương trình của bạn, tạo ra sản lượng mà bạn muốn sao chép
  3. Vào chế độ sao chép:^A [
  4. Di chuyển con trỏ của bạn để điểm bắt đầu
  5. Nhấn enter
  6. Di chuyển con trỏ đến điểm cuối
  7. Hit nhập
  8. Dán:^A]

Screen là mạnh hơn rất nhiều so với (Tôi sử dụng nó để tab nhiều thiết bị đầu cuối ảo mà không cần một mô phỏng thiết bị đặc biệt, và cũng vì vậy mà tôi don' t mất phiên của tôi khi X bị treo hoặc một cái gì đó). Để thoát khỏi màn hình, chỉ cần kết thúc phiên trình bao của bạn hoặc nhập^A ^.

+2

Có cách nào dán ở những nơi khác ngoài thiết bị đầu cuối không? –

2

OP nói rằng anh ấy không muốn làm điều này, nhưng đây là một cách utix unix để làm điều đó cho hậu thế. Nếu bạn tìm hiểu các tiện ích unix nhỏ, chúng có thể khá mạnh mẽ.

ls $ (dirname $ (error.log lỗi grep | đầu -1 | cắt -d "" -f 5-))

lưu ý: Cú pháp từ bộ nhớ

11

tôi tìm XSel hữu ích trong các tình huống tương tự. Đó là một công cụ thao túng lựa chọn X. Ví dụ: điều này sẽ lưu trữ đầu ra của lệnh của bạn vào khay nhớ tạm:

grep error error.log | xsel -bi 
1

Bạn có thể gửi kết quả trực tiếp tới xterm liên quan bằng thiết bị xterm no. Đây là lệnh.

xyz$ls /home/ankit/documents/etc/x/y/z > /dev/pts/0 

(hoặc watever là tên thiết bị, Bạn có thể nhận được nó bằng lệnh 'w' cho xterm mở)

Thử & hy vọng điều này có thể giải quyết vấn đề của bạn.

+3

Điều này không làm cho đầu ra có sẵn để tái sử dụng. –

5

Bạn cũng có thể sử dụng tmuxsimilar capabilities đến screen. Khi bạn đang ở trong tmux và bạn có đầu ra bạn muốn sao chép, bạn có thể làm như sau để sao chép và sau đó dán nó:

  1. Vào chế độ sao chép với Ctrl + B, [
  2. Di chuyển con trỏ bằng các phím mũi tên và sau đó bắt đầu lựa chọn với Ctrl + Space
  3. Di chuyển con trỏ để chọn văn bản/khu vực cần sao chép và sau đó sao chép với Alt + W (điều này ngay lập tức sẽ thoát khỏi chế độ sao chép)
  4. Bây giờ bạn có thể dán (trong vòng tmux chỉ) sử dụng Ctrl + B, ]

Những instructiuons giả emacs tổ hợp phím được kích hoạt. Đối với các liên kết vi, hãy xem điều này comparison hoặc chỉ theo dõi this hướng dẫn từng bước.

Các vấn đề liên quan