端末にいくつかのコマンドを貼り付けると、コマンドが自動的に実行されることがあります(「Enter」キーを押すかのように)、時にはそうでない場合があります。
私は長い間Linuxを使用してきましたが、多くのディストリビューションのさまざまなコンソールに何千ものコマンドを貼り付けましたが、貼り付けたコマンドが自動的に実行されるかどうかはまだわかりません。
この行動を引き起こす要因は何ですか?
答え1
コピー中のテキストのキャリッジリターン文字が原因で自動実行が開始されました。
別の例を見てみましょう。次の行を一度にコピーして端末に貼り付けます。
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
)、および他のほとんど使用されていない文字を「印刷されない文字」と呼びます。
場合によっては、ウェブサイトからテキストをコピーするときに、最後にキャリッジリターンをコピーせずにテキストのみをコピーするのが難しい場合があります(そしてページのスタイルにより、より困難になることがよくあります)。
実験時間!
以下に、問題を説明し、「練習」できる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
テキストで文字が見つかったため、その行が実行されていることがわかります。
答え2
テキストを選択したときに行の末尾に(見えない)改行を含めると、貼り付けたテキストに表示されます。私が知っている限り、これはすべての端末エミュレータで一貫しています。改行文字は「検証」と呼ばれる操作を実行します。
一部のシステム (IBM 3270 などの同期端末を使用するシステム) では、キーストロークを使用してすべての変更をホスト・Enterシステムにコピーして、画面を「検証」します。
答え3
この行動を引き起こす要因は何ですか?
改行文字。
答え4
他の答えはこの質問に非常によく答えますが、WindowsでPuTTYを使用するときに誤ってこのようなことが起こらないようにするソリューションも共有したいと思いました。https://serverfault.com/questions/731022/prevent-accidental-execution-of-commands-in-linux-if-pasting-text- Contains-oneもっと学ぶ。