Terminaldeki bir kopyala / yapıştır işleminin bazen komutu yürütmesine neden olan nedir?


24

Bazı komutları terminale yapıştırdığınızda, bazen otomatik olarak komutu yerine getirir (tıpkı "Enter" tuşuna basıldığında olduğu gibi), bazen değil.

Linux'u çok uzun zamandır kullanıyorum, birçok konsola çeşitli konsollara binlerce komut yapıştırdım ve yapıştırmak üzere olduğum komutun otomatik olarak uygulanıp uygulanmayacağını hala söyleyemiyorum.

Bu davranışı tetikleyen nedir?


5
Bu konuda endişelenmekten kaçınmak istiyorsanız, { yapıştırmadan önce (w / boşluk) yazın, sonra bitirin }. Yapıştırılan komutların çalışması üzerinde etkisi yoktur, ancak siz bloğu kapatana kadar kabuğun çalıştırılmasını önler. Burada açıklanan
loa_in_

Yanıtlar:


37

Otomatik çalıştırmayı tetikleyen, kopyaladığınız metindeki dönüş karakteridir.

Farklı bir örnek alalım, bu satırları bir kerede kopyalayın ve terminalinize yapıştırın:

echo "Hello";
echo "World";

Terminalinize bakarsanız, bunu göremezsiniz:

$ echo "Hello";
echo "World";

Bunu göreceksiniz (ayrıca bir deyim olabilir World):

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

Tüm girdilerin yapıştırılmasını beklemek yerine, ilk satır yürütülür (ve aynı nedenle, ikinci satır da aynı şekilde olabilir veya olmayabilir). Bunun nedeni RETURNiki satır arasında bir karakter olmasıdır.

ENTERKlavyenizdeki tuşa bastığınızda, yaptığınız tek şey ASCII değeri olan karakteri göndermek 13. Bu karakter sizin terminaliniz tarafından hemen algılanır ve şu ana kadar yazdıklarınızı yürütmek için özel talimatlar olduğunu bilir.

Bilgisayarınıza kaydedildiğinde veya ekrana yazdırıldığında, RETURNkarakter tıpkı alfabenin, sayının veya sembolün diğer harfleri gibidir. Bu karakter geri silme ile silinebilir veya diğer normal karakterler gibi panoya kopyalanabilir.

Tek fark, tarayıcınız karakteri gördüğünde, görünür bir karakter yazdırmak yerine, farklı davranması gerektiğini bilir ve bir sonraki metin kümesini bir sonraki satıra taşımak için özel talimatlara sahip olduğunu bilir . RETURNKarakter ve SPACEKarakter (ASCII 32), diğer birkaç nadiren kullanılan karakterlerle birlikte, bu sebeple "olmayan baskı karakterler" olarak bilinir.

Bazen bir web sitesinden metin kopyaladığınızda, yalnızca metni kopyalamak zordur ve sonunda geri dönüş yapılmaz (ve sayfadaki şekillendirmeyle genellikle daha zor yapılır).


Deney zamanı!

Aşağıda problemi açıklayacak ve üzerinde "pratik" yapabileceğiniz iki komut bulacaksınız. İmlecinizi hemen önce başlatın echove vurgu, oktan hemen önce gelene kadar sürükleyin:

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

Ve şimdi ikinci komutu dene. İmlecinizi hemen önce başlatın echove imleç ikinci satıra gelene kadar, ancak <-okun hemen önünde olana kadar aşağı sürükleyin . Kopyalayın ve ardından terminalinize yapıştırın:

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

Tarayıcınıza bağlı olarak, seçtiğiniz metnin iki satırdan geçtiği bile görülmeyebilir. Ancak terminale yapıştırdığınızda, satırın yürütüldüğünü göreceksiniz, çünkü RETURNkopyalanan metinde bir karakter buldu .


5
Karmaşıklığı azaltmak için, Windows'un iadeler için iki farklı anahtar kullandığından bahsetmiyorum. Sadece bunun günlük bir sıkıntı ve uğraşmamız gereken bir mücadele olduğunu bilin.
IQAndreas

boşluk bir basım karakteridir
mikeserv 22:15

1
Belki. Ancak, Firefox’tan bir kabuğa (stty ile "raw" olarak ayarlanmış) bir macunu test ettiğimde, satırlar yeni satırlarla bitiyor - satırbaşının geri dönmemesi.
Thomas Dickey

1
Bir sonraki satıra geçmek zorunda değilsiniz, noktalı virgül yeterli miktarda (2-3 karakter) seçilip ilerletilirse, tüm satırı seçer, bu da kendinize yeni bir satır yakaladığınız anlamına gelir.

@ThomasDickey Windows'da veya Unix tabanlı bir sistemde misiniz?
IQAndreas

10

Metin seçtiğinizde, satırın sonuna (görünmez) yeni satırı eklerseniz, yapıştırılan metinde olacaktır. Bu, bildiğim tüm terminal emülatörleri arasında tutarlı. Newline ne diyorsan onu "doğrula" yapar.

Bazı sistemlerde (IBM 3270 gibi senkronize terminaller kullananlar gibi), Enteranahtar tüm değişiklikleri ana bilgisayara kopyalayarak ekranı "doğrular".



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.