> Bashでインタラクティブに関数を定義したときに表示されるシンボル

> Bashでインタラクティブに関数を定義したときに表示されるシンボル

私のシェル環境の動作が変更されました。

以前は、次の関数定義を貼り付けたとき

function exampleFunc {
    echo hello
}

シェルはフォーマットされているように見え、新しい関数定義を登録します。

>これで、何らかの理由で最初の行を除くすべての行の前に表示されます。

function exampleFunc {
>echo hello
>}

forループを含む関数を今は登録できないことがわかりました。

これの説明は何ですか?以前のモードにどのように戻すことができますか?


Ubuntu 20.04

この変更はインストール後に発生しました。ヌッシャーしかし、関係がないかもしれません。

ベストアンサー1

これはインストールとは関係ありませんnushell。また、シェルが正しく機能するのを妨げることはありません。

これは> シェルのデフォルトです2番目の通知PS2)。ユーザーがEnter現在のコマンドを完了せずにキーを押した後、シェルで追加の入力が必要なときはいつでもセカンダリプロンプトが表示されます。これは、シェルが対話型モードの場合にのみ発生します。

POSIX規格これについて教えてくださいPS2:

ユーザーが<newline>インタラクティブシェルでbeforeと入力してコマンドラインを完了するたびに、この変数の値をパラメータ拡張して標準エラーに書き込む必要があります。デフォルト値はです>

特定の例では、関数定義はまだ完了する必要があるコマンドです。シェルは、ユーザーが}定義の最後に閉じる中括弧を入力するまでコマンドを実行することはできません。

次の場合、2番目のメッセージも受信されます。生地bashReadlineライブラリの「角かっこ貼り付け」が無効になっている場合は、シェルコマンドで。デフォルトでは、角かっこ貼り付けモードが有効になっています。これは、シェルが個々の行ではなく貼り付けたテキストブロックをすべて一度に処理することを意味します。ファイルに次の行を追加すると、~/.inpturcこの動作を無効にできます(将来のシェルセッションで)。

set enable-bracketed-paste off

端末が「愚か」または5.0より前のbashシェルバージョンを使用している場合は、角かっこ貼り付けモードもデフォルトで無効になります。

シェルごとに異なるデフォルト値があります$PS2。たとえば、シェルはzshプロンプトを動的に更新し、現在処理されていないコマンドを通知します。

$ function foo {
function> for arg do
function for>   print -r $arg
function for> done
function> }
$ foo 1 2 3
1
2
3

...bashシェルが静的> 文字列を使用している間:

$ function foo {
> for arg do
>   printf '%s\n' "$arg"
> done
> }
$ foo a b c
a
b
c

このシェルは、POSIXファミリーシェルの補助プロンプトと同じようにnushell見えます。:::ただし、このnushellシェルはPOSIXシェルになりようとしません。

PS2変数を設定しないと、bash混乱が発生する可能性があります。たとえば、私は長期実行コマンドを呼び出したと思いましたが、実際には閉じる引用符を忘れた場合、シェルはコマンドが完了するのを待っているという指示はありません。

おすすめ記事