ターミナルで「>」が繰り返し表示されることがあるのはなぜですか?


19

さて、特定のコマンドを間違った方法で実行すると(スペルミスなど)、端末はこれを出力します:>ではなく、computername:workingfolder username$入力すると次のようになります:

>

>

>

Enterキーを3回押した場合です。

回答:


43

> これはデフォルトの継続プロンプトです。これは、前に入力したものに不均衡な引用符があった場合に表示されるものです。

例として、コマンドラインに単一引用符を入力し、その後にいくつかのenterキーを入力します。

$ '
> 
> 
> 

次のいずれかになるまで継続プロンプトが表示されます

  • (a)引用符を閉じてコマンドを完了します

    または

  • (b)Ctrl+ Dを入力して入力を終了します。この時点で、シェルは不均衡な引用符に関するエラーメッセージで応答します。

    または

  • (c)Ctrl+ Cを入力すると、入力したコマンドが中止されます。

これがどのように役立つか

場合によっては、埋め込まれた改行を含む文字列を入力することもできます。次のようにできます。

$ paragraph='first line
> second line
> third line
> end'

これで、そのシェル変数を表示すると、プロンプトは消えたが改行が保持されていることがわかります。

$ echo "$paragraph"
first line
second line
third line
end

16

コマンドに閉じられていない引用符がある場合に発生します。それは次のようなものです:

$ echo "test here
>
>
...

引用符を閉じることで、そのモードを終了できます("または'、または開いている引用符が何であれ)。それはまた、ブレース区切りブロック、部分的に完全であり得るfor-doか、while-doループ、又は特定の他の構築物。を押しCtrl-Cてこのコマンドをキャンセルすることもできます(その後、押しUpて修正します)。

これは、予期しない場所でパラメーターまたは履歴の展開が発生したときに、明らかな引用符なしで発生することがあります。


>あなたのであるPS2(「二次プロンプト」)値。これを別のものに変更して、何が起こったかを思い出させることができます。

PS2="Unclosed >"

代わりに各行の先頭に.bashrc印刷しますUnclosed >


7

他の回答に加えて、\行の最後の文字としてa を入力すると、継続プロンプトが表示されます。


5
(私にとっては、バックスラッシュが恐ろしくEnterキーに近いため、これは通常偶然に起こります。)
ミスターリスター14年

オンになっていない私のキーボード、そうではありません。
TRiG 14年

@TRiGつまり、\の代わりに誤って#を入力することがよくあります。右...
ミスターリスター

7

答えは、Bashリファレンスマニュアルのこの不可解な言及にあります。

5.1 Bourneシェル変数

[...]

  • PS1:プライマリプロンプト文字列。デフォルト値は ' \s-\v\$'です。表示される前に展開されるエスケープシーケンスの完全なリストについては、「プロンプトの印刷」を参照してくださいPS1
  • PS2:2次プロンプト文字列。デフォルト値は ' >'です。

…に続いて

6.3.3対話型シェルの動作

  1. Bash PS1は、コマンドの最初の行をPS2読み取る前に展開して表示され、複数行のコマンドの2番目以降の行を読み取る前に展開して表示します。

したがって、>を押すEnterとプロンプトが表示され、Bashはコマンドが不完全であると判断します。その理由は次のとおりです。

  • 改行の前の文字はaです\。これは行の継続として扱われます。
  • あなたは不完全な文字列(不一致引用符または終端されていないここで-DOC)またはのようないくつかの他の不一致の区切り文字を、持っています$()()``
  • 関数定義、forループ、whileループ、またはを開始しましたcase

意図しない入力エラーが原因でセカンダリプロンプトが表示されている場合は、ヒットControlCしてプライマリプロンプトに戻ります。


また、here-docに入力しているときに2次プロンプトが表示されます。しかし、これは他の人よりも偶然に起こる可能性が低いです。
バーマー14年

6

コマンドを完了するのを待っているシェル。閉じられていない引用符がどこかにあるか、「for」ループを開始していると判断し、ユーザーが入力を完了するのを待つ

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