端末は、\を入力した後、>を表示します


回答:


35

コマンドラインを使用するときはいつでも、非常に長いコマンドを実行する必要がある場合があります。したがって、読みやすく理解しやすいように、コマンドを複数行に分割します。ただし、で入力された改行文字を使用Enterすると、シェルはそれが新しいコマンドであると見なします。そのため、\その後に改行文字を使用します。

基本的に、コマンドまたはbashスクリプトは「解釈」されます。つまり、行ごとに実行されます。すべての新しい行は、新しいコマンドの開始を意味します。ターミナルでを押すEnterと、新しいコマンドを実行するプロンプトが表示されます。そのため、新しい行を「エスケープ」する必要があります。\続けて入力Enterすると、現在のコマンドを複数行に分割できるので、シェルは新しいコマンドではなく、前のコマンドの継続であると考えます。

> 入力するコマンドの次の行のプロンプトにすぎません。

例:
複数のパッケージをインストールする場合、コマンドは次のようになります

$ sudo apt install [package1] [package2] [package3] ...

しかし、場合によっては、コマンドが乱雑になります。したがって\Enter(newline character)が続く

$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...

4
@Curiouskangarooところで、変数と変数に値を設定することで、新しいコマンド行継続プロンプトの動作を制御できます。bashのマニュアルページを参照して形式を学習し、現在の設定を表示するために使用します。$PS1$PS2echo "'$PS2'"
jpaugh

14

バックスラッシュ文字(\)は、シェルでエスケープ文字として使用されます。行の最後の文字として使用すると、改行がエスケープされるため、コマンドを終了せずに次の行で続行できます。これは>、Bash のプロンプトで示されます。

例:

$ echo A\
> B
AB
$

\コマンドにリテラルを追加するには、別のバックスラッシュを使用してエスケープする必要があります。

$ echo \\
\
$

7

[他の2つとして(長すぎる/複雑な)答えを追加すると、 ">"の表示方法に言及しません...つまり、PS2には言及しません]

あなたは、入力された:\Enter\ただのシェルに述べてい出力Enterの代わりに、literral文字としていつものように、それを解釈する(したがって、シェルが「次の行に行く」の代わりに、現在のコマンドラインを終端し、それを解釈するあなたには、いくつかでない限り。ヒアドキュメント、forループなどの他の構成要素)。

あなたのため、ターミナル解釈\Enter(コマンドを解釈するために起動せずに)「次の行に行く」ため、端末が今、あなたは複数行のコマンドの2番目の行を入力させて頂いており、それより見やすく表示させるために:として$PS2(コンテンツを以降の各行でPS2プロンプトと呼ばれます)。

PS2の変数は、通常、デフォルトで次のように定義されますPS2="> "exempleのためにすることができますし、編集し、あなたの〜/ .bashrcにあなたが(考慮して望むようにそれを再定義することは、芋、回避は、次のような危険な文字、含むべきであること>かを;、そしてあなたを助ける必要がありますどちらかはっきりそれは複数行のコマンドで表示されますが、それはだ、複数行の内容を無効(例:PS2="#cont#")できるだけそのラインにほとんど影響として、それらをしたり、簡単にコピーしてみましょう/ペースト(例:PS2=" "

ちなみに、これは悪いデフォルトです。場合によっては重要なバイナリコマンドを削除してしまう可能性が非常に高いためです。

PS2を別のものに再定義して(例:PS2 = ""、例として)、次のことを恐れずに複数行のコマンドを簡単にコピー/貼り付けできます。

たとえば、コマンドが非常に長くなり始めたとしましょう(端末の幅が十分でない場合、画面上で折りたたまれます)。

grep -i "something"  /some/file  /another/file /3rd/file /etc/someimportantfile 

コマンドが長すぎる(および折り返す)場合、次の行を挿入することにより次の行をどこで(いつ)挿入するかを選択して、視覚的に2行に分割することができます\Enter

grep -i "something"  /some/file  /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !

デフォルトのPS2を使用すると、シェルは "/ etc / someimportantfile"の前に ">"を追加しました。したがって、これらの2行を別のターミナルにコピー/貼り付けすると、アクションはまったく異なります。最初の3つのファイルにのみアクセスし、grep 出力は4番目のファイル(/ etc / someimportantfile)の内容を置き換えます!

これらの問題(および他の多くの問題)を回避するには、たとえば、define:PS2=" "を使用して、複数行のコマンドをよりクリーンにし、コピー/貼り付けを簡単にします。

grep -i "something"  /some/file  /another/file /3rd/file \
  /etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!

今回は/ bin / somecommandが単に2スペース右にシフトされ、「>」が挿入されていないため、この2行のコマンドを安全にコピー/貼り付けできることに注意してください。

PS2は、「for」、「while」などのループでも使用され、「」として定義されている方が、私にとっては、これらのループでも優れています。

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