ターミナルでのコピー/貼り付けでコマンドが実行されることがあるのはなぜですか?


24

ターミナルにコマンドを貼り付けると、コマンドが自動的に実行される場合があります(「Enter」キーが押された場合と同様)。

私はずっと昔からLinuxを使っていて、多くのディストリビューションのさまざまなコンソールに何千ものコマンドを貼り付けてきましたが、貼り付けようとしているコマンドが自動的に実行されるかどうかはまだわかりません。

この動作をトリガーするものは何ですか?


5
このことを心配したくない場合は、{ 貼り付ける前に(スペース付き)を入力し、で終わり}ます。貼り付けられたコマンドの動作には影響しませんが、ブロックを閉じるまでシェルは実行できません。ここで説明する[ gnu.org/software/bash/manual/html_node/Command-Grouping.html]
loa_in_

回答:


37

自動実行をトリガーしているのは、コピーしているテキスト内の戻り文字です。

別の例を見てみましょう。これらの行を一度にコピーして、ターミナルに貼り付けます。

echo "Hello";
echo "World";

端末を見ると、これは表示されません。

$ echo "Hello";
echo "World";

これが表示されます(と言う行もありますWorld):

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

すべての入力が貼り付けられるのを待つ代わりに、最初の行が実行されます(同じ理由で、2行目も貼り付けられる場合とされない場合があります)。これはRETURN、2行の間に文字があるためです。

ENTERキーボードのキーを押すと、ASCII値がの文字が送信されます13。その文字は端末によってすぐに検出され、これまでに入力した内容を実行するための特別な指示があることがわかります。

コンピューターに保存するか、画面に印刷すると、RETURN文字はアルファベット、数字、または記号の他の文字とまったく同じになります。この文字は、バックスペースで削除するか、他の通常の文字と同じようにクリップボードにコピーできます。

唯一の違いは、ブラウザが文字を見ると、表示されている文字を印刷する代わりに、異なる方法で処理する必要があることを認識し、次のテキストセットを次の行に移動する特別な指示があることです。RETURN文字とSPACE文字(ASCIIは32)、いくつかの他のめったに使われない文字と一緒に、このような理由のための「非印字文字」として知られています。

Webサイトからテキストをコピーするときに、最後に戻るのではなくテキストのみをコピーするのが難しい場合があります(また、多くの場合、ページのスタイル設定により難しくなります)。


実験時間!

以下に、問題を説明し、「練習」できる2つのコマンドがあります。カーソルを直前に開始しecho、ハイライトが矢印の直前になるまでドラッグします。

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

そして、2番目のコマンドを試してください。カーソルを直前に開始し、カーソルechoが2行目にあるが、<-矢印の直前にあるまで下にドラッグします。コピーして、ターミナルに貼り付けます。

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

ブラウザによっては、選択したテキストが2行を超えていることすら見えない場合があります。しかし、端末に貼り付けるとRETURN、コピーされたテキストに文字が見つかったため、行が実行されることがわかります。


5
複雑さを軽減するために、Windowsは返品に2つの異なるキーを使用するという言及を完全に無視しました。それは日々の悲惨であり、私たちが対処しなければならない闘争であることを知ってください。
IQAndreas

スペースは、印刷文字である
mikeserv

1
おそらく。ただし、Firefoxからシェルへの貼り付け(sttyを "raw"に設定)をテストすると、行は改行ではなく改行で終わります。
トーマスディッキー

1
次の行に移動する必要はありません。セミコロンを選択して十分な量(2〜3文字)を超えて移動すると、行全体が選択されます。つまり、改行をキャッチします。

@ThomasDickey WindowsまたはUnixベースのシステムを使用していますか?
IQAndreas

10

テキストを選択するときに、行の最後に(非表示の)改行を含めると、貼り付けられたテキストに含まれます。これは、私が知っているすべてのターミナルエミュレータで一貫しています。改行は、「検証」と呼んでいることを行います。

一部のシステム(IBM 3270などの同期端末を使用するシステムなど)では、Enterキーはすべての変更をホストにコピーすることで画面を「検証」します。



2

この動作をトリガーするものは何ですか?

改行文字。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.