Xóa dòng mới khỏi 'clipboard' để ngăn thực thi trên thiết bị đầu cuối?


9

Có cách nào để chạy bất cứ thứ gì bạn sao chép vào 'clipboard' thông qua một số loại bộ lọc không? Lý tưởng nhất để loại bỏ dòng mới từ một cái gì đó bạn sao chép, để nó không tự động chạy trong thiết bị đầu cuối?

Đây là những gì nó trông giống như khi tôi sao chép bài kiểm tra trong câu hỏi, và đôi khi tôi quên rằng đây là một dòng mới.
nhập mô tả hình ảnh ở đây


Tôi cũng đang cần điều này!
Nam G VU

Vì vậy, điều này vẫn không thể như ngày nay? điều có vẻ tầm thường và không có trình giả lập thiết bị đầu cuối thực hiện điều này?
Tên hiển thị

@DisplayName xem câu trả lời được chấp nhận
Pureferret

Câu trả lời:


5

Các thiết bị đầu cuối hiện đại tốt hỗ trợ dán khung : khi bạn sử dụng lệnh dán của thiết bị đầu cuối, nó sẽ gửi các chuỗi thoát đặc biệt xung quanh nội dung clipboard. Nếu hệ vỏ của bạn hỗ trợ dán khung, nó sẽ dán nội dung trong bảng tạm bao gồm mọi ký tự điều khiển như hiện tại và đặc biệt là một dòng mới theo dõi sẽ không kích hoạt việc thực thi lệnh.

Zsh 5.1 hỗ trợ dán khung và mặc định bật nó lên. Phiên bản cũ hơn có thể được dạy . Bash .44.4 hỗ trợ dán ngoặc nếu bạn thêm set enable-bracketed-paste onvào ~/.inputrc.

Nếu thiết bị đầu cuối hoặc shell của bạn không hỗ trợ dán khung, bạn có thể xác định chức năng shell dán mà không có dòng mới.

Trong zsh, lệnh sau nhớ lại nội dung của bảng tạm, trừ các dòng mới theo dõi và đưa nó lên để chỉnh sửa (ngay cả khi có nhiều dòng):

print -z -- "`xsel -b`"

Trong bash, bạn có thể đẩy nội dung của bảng tạm trừ đi các dòng mới vào ngăn xếp lịch sử. Sau đó, nhấn Upđể hiển thị lệnh để chỉnh sửa.

history -s -- "`xsel -b`"

Đây là giải pháp đẹp! Làm việc cho tôi trong Ubuntu 18.04! Cảm ơn bạn!
Nam G VU

4

Có, sử dụng catđể dán vào một tập tin, làm bất cứ điều gì bạn thích và sau đó thực hiện nó.

Đối với trường hợp này:

$ cat > tmp
[paste][Ctrl+D]
$ tr -d '\n' <tmp | xclip # this remove all "new line" characters 
                          #  and copy back to clipboard

Và làm cách nào tôi có thể sử dụng nó ở cấp GUI khi tôi sao chép một số lệnh từ trình duyệt (như câu trả lời Stack) vào vỏ của mình ... Thực tế tôi đã phá hỏng hệ điều hành của mình ngày hôm qua vì sao chép như vậy :)
Tomasz Kapłoński

2

Điều này làm cho \evchèn bảng tạm mà không có dòng mới trong bash 4.0 trở lên:

pasteline() {
  local input=$(xsel -b)
  input=${input//$'\n'}
  READLINE_LINE=${READLINE_LINE:0:$READLINE_POINT}$input${READLINE_LINE:$READLINE_POINT}
  READLINE_POINT=$((READLINE_POINT+${#input}))
}

bind -x '"\ev": pasteline'

Thay thế xsel -bvới pbpastevà cài đặt bash 4 trong OS X.


2

Tôi nhận ra rằng chúng tôi có thể làm điều đó trong một dòng, lấy cảm hứng từ câu trả lời @ RSFalcon7

bằng cách sử dụng xsel, để sao chép vào lựa chọn chính

cat | tr -d '\n' | xsel

[paste], 2 times[Ctrl-D]
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.