web-dev-qa-db-ja.com

端末で ">"が繰り返し表示されることがあるのはなぜですか?

承知しました。特定のコマンドを間違った方法で実行すると(スペルミスなど)、ターミナルは次のように出力します:> の代わりに computername:workingfolder username$と入力すると、次のようになります。

>

>

>

Enterキーを3回押すと、そうなります。

19
DisplayName

>はデフォルトの継続プロンプトです。これは、前に入力した引用符のバランスが取れていない場合に表示されます。

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

$ '
> 
> 
> 

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

  • (a)コマンドを終了引用符で完了します

    または

  • (b)タイプ Ctrl+D 入力を完了すると、シェルは不均衡な引用符に関するエラーメッセージで応答します。

    または

  • (c)タイプ Ctrl+C 入力したコマンドを中止します。

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

場合によっては、改行が埋め込まれた文字列を入力したいことがあります。これは次のように行うことができます。

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

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

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

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

$ echo "test here
>
>
...

引用符を閉じることでそのモードを終了できます("または'、またはオープンクォートが何であれ)。また、中括弧で区切られたブロック、部分的に完全なfor-doまたはwhile-doループ、またはその他の特定の構造。を押すこともできます Ctrl-C このコマンドをキャンセルするには(次に Up それを修正するため)。

parameter または history の展開が予想外の場所で行われた場合、これは引用符が欠けていることなく発生することがあります。


> あなたの - PS2 ( "secondary Prompt")の値。これを別の何かに変更して、何が起こったかを思い出させることができます。

PS2="Unclosed >"

あなたの.bashrcは印刷しますUnclosed >代わりに各行の先頭に。

16
Michael Homer

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

7
Mr Lister

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

5.1 Bourneシェル変数

[...]

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

その後に続く

6.3.3対話型シェルの動作

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

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

  • 改行の前の文字は_\_で、これは 行の継続 として扱われます。
  • 不完全な文字列(引用符が一致していないか、ヒアドキュメントが終了していない)、または$()、_()_、_``_などのその他の不一致の区切り文字があります。
  • 関数定義、forループ、whileループ、またはcaseを開始しました。

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

7
200_success

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

6
SidJ