ngăn chặn nhiều dòng trong bash


10

Tôi thường sử dụng ctrl+cđể sao chép văn bản từ một số ứng dụng gui và sau đó dán nó vào trình giả lập thiết bị đầu cuối (terminator) của mình, sử dụng menu chuột phải và nhấp chuột. Đôi khi tôi quên rằng bảng tạm chứa một số dòng, khi được dán vào bash khiến mỗi dòng bị "thực thi"

Có một số giải pháp để ngăn chặn hoàn toàn dán nhiều dòng?


trước tiên hãy dán vào notepad, để xem những gì bạn có, sau đó nếu được thì hãy tiếp tục dán nó vào ứng dụng của bạn
Skaperen

1
trong bash chạy lệnh sleep 999999sau đó thực hiện dán nếu nó trông ổn. lệnh ngủ không đọc các dòng và chúng bị loại bỏ khi bạn nhấn ctrl+c.
Skaperen 11/05/2015



1
@Otheus, printf '\e[?2004h'trong hầu hết các trình giả lập thiết bị đầu cuối giống như xterm cho phép chế độ dán có dấu ngoặc trong đó thiết bị đầu cuối ngoặc văn bản đã dán để các ứng dụng có thể phát hiện nơi bắt đầu dán và nơi kết thúc. xterm cũng hỗ trợ một chế độ khác với \e[?2005htất cả các ký tự được dán có tiền tố ^V(được hiểu bởi nhiều ứng dụng và kỷ luật dòng tty như litteral-next).
Stéphane Chazelas

Câu trả lời:


5

Câu trả lời này không cụ thể nhất cho câu hỏi của người dùng Vui lòng xem câu trả lời thứ 2 của tôi. Tôi để điều này ở đây vì nó giải quyết vấn đề chung hơn .

Theo các ý kiến để bài ban đầu của bạn, bạn cần (1) một giả lập thiết bị đầu cuối mà hỗ trợ trong ngoặc vuông dán và (2) tương ứng hỗ trợ cho bất cứ điều gì đang chạy trong nhà ga, tức là vim, bash, zsh. Trình giả lập thiết bị đầu cuối hỗ trợ dán ngoặc (danh sách sẽ được cập nhật dựa trên nhận xét cho bài đăng này):

  • xterm - từ ??
  • gnome-terminal - từ ??
  • putty - kể từ 0,63 (ngày phát hành 2013-08-06)

Các ứng dụng hỗ trợ chế độ ngoặc vuông:

  • vim
  • zsh

Đối với bash, StéphaneChazelas đã kết hợp một tập lệnh shell để tạo điều kiện phát hiện chế độ đó và thực hiện hành động thích hợp.

Một câu trả lời cụ thể hơn - ngăn chặn các dòng bị cắt nhỏ - không thể trả lời được mà không biết về chương trình unix đang chạy khi bạn nhấn dán.

Một trình quản lý clipboard có thể là những gì bạn cần.


Tập lệnh trong đó không phát hiện dán khung, đó là tập lệnh perl mô phỏng hình thức dán khung thứ 3 không yêu cầu hỗ trợ trong ứng dụng ngoài ứng dụng cần hiểu ^ V là rác tiếp theo (tập lệnh đó sẽ thực sự trả lời câu hỏi này mặc dù có lẽ sẽ cần phải cải thiện, nó chỉ là một PoC).
Stéphane Chazelas

@ StéphaneChazelas cứ thoải mái chỉnh sửa / cải thiện bài viết của tôi. :) "Ứng dụng cần phải hiểu ^Vliteral-next. Nhưng làm thế nào để vào ^Vđược luồng đầu vào của ứng dụng?
Otheus

Nó sẽ nhận được nó nếu thiết bị tty bên trong không ở chế độ icanon (như bashlời nhắc của readline sẽ thấy nó (và sẽ coi nó là nghĩa đen tiếp theo)). Nếu ở chế độ icanon, kỷ luật dòng của thiết bị tty bên trong đó sẽ loại bỏ nó (miễn là lnextký tự đó ^V), giống như khi bạn nhập Ctrl-V X theo cách thủ công ..
Stéphane Chazelas

1
Nếu không sử dụng tập lệnh đó, không có gì chèn ^Vtrừ khi bạn sử dụng quoted pastechế độ của xterm (được bật bằng cách gửi \e[?2005h). perlKịch bản đó có thể được điều chỉnh sao cho nó loại bỏ tất cả trừ dòng đầu tiên trong một dán nhiều dòng (mặc dù không đáng tin cậy cho các loại bột nhão lớn), nhưng vì nó đã được, vì nó trích dẫn dòng mới cho dòng đọc (như thể bạn đã nhấn Ctrl- V Ctrl-J), nó ngăn các dòng được thực thi (chúng chỉ được thêm vào bộ đệm chỉnh sửa và bạn vẫn cần nhấn Enter để thực thi chúng).
Stéphane Chazelas

4
Câu trả lời thứ hai là gì?
Xiao
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.