Điều gì gây ra một bản sao / dán trong thiết bị đầu cuối đôi khi thực hiện lệnh?


24

Khi bạn dán một số lệnh trong terminal, đôi khi nó sẽ tự động thực thi lệnh (giống như khi nhấn phím "Enter"), đôi khi thì không.

Tôi đã sử dụng Linux từ lâu, đã dán hàng ngàn lệnh trong nhiều bảng điều khiển khác nhau trên nhiều bản phát hành và tôi vẫn không thể biết liệu lệnh tôi sắp dán có được thực hiện tự động hay không.

Điều gì kích hoạt hành vi này?


5
Nếu bạn muốn tránh lo lắng về điều này, hãy gõ { (w / dấu cách) trước khi dán, sau đó kết thúc bằng }. Nó không có tác dụng đối với hoạt động của các lệnh đã dán, nhưng ngăn shell thực thi nó cho đến khi bạn đóng khối. Mô tả ở đây [ gnu.org/software/bash/manual/html_node/Command-Grouping.html]
loa_in_

Câu trả lời:


37

Đó là ký tự trả về trong văn bản bạn đang sao chép đang kích hoạt thực thi tự động.

Hãy lấy một ví dụ khác, sao chép tất cả các dòng này cùng một lúc và dán chúng vào thiết bị đầu cuối của bạn:

echo "Hello";
echo "World";

Nếu bạn nhìn vào thiết bị đầu cuối của mình, bạn sẽ không thấy điều này:

$ echo "Hello";
echo "World";

Bạn sẽ thấy điều này (cũng có thể có một dòng nói World):

$ echo "Hello";
Hello
$ echo "World";

Thay vì chờ đợi tất cả các đầu vào được dán vào, dòng đầu tiên sẽ thực thi (và vì lý do tương tự, dòng thứ hai có thể hoặc không thể làm như vậy). Điều này là do có một RETURNnhân vật giữa hai dòng.

Khi bạn nhấn ENTERphím trên bàn phím, tất cả những gì bạn đang làm là gửi ký tự có giá trị ASCII là 13. Thiết bị đó được phát hiện ngay lập tức bởi thiết bị đầu cuối của bạn và biết rằng nó có các hướng dẫn đặc biệt để thực hiện những gì bạn đã nhập cho đến nay.

Khi được lưu trữ trên máy tính của bạn hoặc được in trên màn hình của bạn, RETURNký tự giống như bất kỳ chữ cái nào khác của bảng chữ cái, số hoặc ký hiệu. Ký tự này có thể được xóa bằng backspace hoặc sao chép vào clipboard giống như bất kỳ ký tự thông thường nào khác.

Sự khác biệt duy nhất là, khi trình duyệt của bạn nhìn thấy ký tự, nó biết rằng thay vì in một ký tự hiển thị, nó nên xử lý nó theo cách khác và có các hướng dẫn đặc biệt để chuyển bộ văn bản tiếp theo xuống dòng tiếp theo. Nhân RETURNvật và SPACEnhân vật (ascii 32), cùng với một vài nhân vật ít được sử dụng khác, được gọi là "nhân vật không in" vì lý do này.

Đôi khi, khi bạn sao chép văn bản từ một trang web, thật khó để chỉ sao chép văn bản và không trả lại ở cuối (và thường khó thực hiện hơn bởi kiểu dáng trên trang).


Thời gian thử nghiệm!

Dưới đây bạn sẽ tìm thấy hai lệnh sẽ minh họa vấn đề và bạn có thể "thực hành" trên. Bắt đầu con trỏ của bạn ngay trước echovà kéo cho đến khi phần tô sáng ở ngay trước mũi tên:

echo "Wait for my signal...";<- End cursor here right after the semicolon

Và bây giờ hãy thử lệnh thứ hai. Bắt đầu con trỏ của bạn ngay trước echovà kéo xuống cho đến khi con trỏ ở dòng thứ hai, nhưng ở ngay trước <-mũi tên. Sao chép nó, và sau đó dán nó vào thiết bị đầu cuối của bạn:

echo 'Go go go!';
<- End cursor here right before the arrow

Tùy thuộc vào trình duyệt của bạn, có thể thậm chí không thể thấy rằng văn bản bạn đã chọn đã đi qua hai dòng. Nhưng khi bạn dán nó vào thiết bị đầu cuối, bạn sẽ thấy rằng nó thực thi dòng, bởi vì nó tìm thấy một RETURNký tự trong văn bản được sao chép.


5
Để giảm độ phức tạp, tôi hoàn toàn bỏ qua việc đề cập rằng Windows sử dụng hai khóa khác nhau để trả về. Chỉ cần biết rằng đó là một tai ương hàng ngày và đấu tranh chúng ta phải đối phó.
IQAndreas

không gian là một nhân vật in ấn
mikeerv

1
Có lẽ. Tuy nhiên, khi tôi kiểm tra một miếng dán từ Firefox vào một cái vỏ (với stty được đặt thành "raw"), các dòng kết thúc bằng dòng mới - không phải trả về vận chuyển.
Thomas Dickey

1
Bạn không cần phải chuyển sang dòng tiếp theo, nếu bạn chọn và di chuyển qua dấu chấm phẩy một lượng vừa đủ (2-3 ký tự), nó sẽ chọn toàn bộ hàng, có nghĩa là bạn đã tự bắt được một dòng mới.

@ThomasDickey Bạn có trên Windows hoặc hệ thống dựa trên Unix không?
IQAndreas

10

Khi bạn chọn văn bản, nếu bạn tình cờ bao gồm dòng mới (vô hình) ở cuối dòng, nó sẽ nằm trong văn bản được dán. Đó là nhất quán trên tất cả các trình giả lập thiết bị đầu cuối mà tôi biết. Dòng mới thực hiện những gì bạn đang gọi là "xác nhận".

Trên một số hệ thống (chẳng hạn như các hệ thống sử dụng thiết bị đầu cuối đồng bộ như IBM 3270), Enterkhóa sẽ "xác thực" màn hình bằng cách sao chép tất cả các thay đổi vào máy chủ.



2

Điều gì kích hoạt hành vi này?

Các nhân vật dòng mới.

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.