web-dev-qa-db-ja.com

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

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

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

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

25
kursus

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

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

echo "Hello";
echo "World";

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

$ echo "Hello";
echo "World";

これが表示されます(Worldと書かれた行がある場合もあります):

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

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

キーボードのENTERキーを押すと、ASCII 13の値を持つ文字が送信されます。その文字は、ターミナル。これまでに入力した内容を実行するための特別な指示があることを知っています。

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

唯一の違いは、ブラウザが文字を見ると、printing目に見える文字ではなく、別の方法で処理する必要があることを認識し、次のテキストセットを次のテキストセットに移動する特別な指示があることです。ライン。 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文字が見つかったため、その行が実行されることがわかります。

37
IQAndreas

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

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

10
Thomas Dickey

他の回答も質問によく答えていますが、WindowsでPuTTYを使用している場合にこれが誤って発生するのを防ぐための解決策も共有したいと思いました-参照 https://serverfault.com/questions/731022詳細については、/ prevent-accidental-execution-of-commands-in-linux-if-pasting-text-taining-one をご覧ください。

2
sa289

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

改行文字。

2
PSkocik