Starshipプロンプトのエイリアスを作成した後、WindowsターミナルのUbuntuがクラッシュします。

Starshipプロンプトのエイリアスを作成した後、WindowsターミナルのUbuntuがクラッシュします。

リリースバージョン:Ubuntu-18.04(Windows 10 WSL2で実行)

新しいUbuntuインスタンスの端末は、「Vim:警告:出力は端末に出力されません」というメッセージで完全に停止します。

VIMで.bashrcファイルを編集した後にこれが発生しました。私がしたのは、エイリアスのいくつかを追加しただけです。エルエス注文する。と入力するとsource .bashrc上記のようなメッセージが出ました。 ctrl+C または ctrl+z を押しても何もできず、コマンド入力を許可するプロンプトも表示されません。

" ScreenshotOfTerminal_"Vim: 警告: 出力は端末に送信されません。

.bashrcファイルを編集しながら何らかの間違いを犯していることはほとんどわかりませんが、ファイルを編集して実行するのはどこでも見えません。完全なディストリビューションを再インストールする以外に、この問題を解決する他の方法はありますか?

編集1:Windowsファイルエクスプローラでbashrcファイルを表示できます。これはその一部です:

ここに画像の説明を入力してください。

私が編集した唯一の部分は、starshipという新しいエイリアスを追加することでした。

alias starship='vi ~/.config/starship.toml'

私にとっては構文が正しいように見えるので、この問題が発生する理由はさらに混乱しています。

編集2:端末がしばらく停止して停止し、端末で再び作業できるようになりました。私は本当に何もしませんでしたが、ちょうど待つと、私は問題がエイリアスを追加し、Starshipプロンプターに関連するすべてに関係がないと思います。

編集3:回答を提供TheDr01dsではない問題を完全に解決しました。提案通りムルeval "$(starship init bash)"、新しいエイリアスが呼び出されるので、エイリアスが最初に問題を引き起こしたに違いありません。宇宙船

答え1

私の考えでは、これは予想される動作です。最近の編集内容によると、ターミナル制御を取得しましたが、次回WSLを起動するとエラーが再び表示されるようです。

何が起こるかは次のとおりです。

  • Starshipをインストールすると、下部に次の行を追加するように求められます~/.bashrc

    eval "$(starship init bash)"
    
  • だからあなたは再定義するこのstarshipコマンドは、Bashで次のエイリアスとして機能します。

    alias starship='vi ~/.config/starship.toml'
    

結果:

最後の行は次~/.bashrcのように解釈されます。

eval "$(vi ~/.config/starship.toml init bash)"

その行を入力すると、同じエラーメッセージが表示され、端末が再び停止します。何が起こっているのかviBash コマンド置換が実行されています。これはサブシェルですいいえインタラクティブなため、端末は接続されません。標準出力(など)は画面には表示されませんが、evalシェル('d)によってキャプチャされ解釈されます。

vi取得したら~/.bashrc(またはシェルを再起動すると)実行されます。これを知って、あなたできる次の方法で復元できます。

Ctrl+ C Ctrl+C :qEnter:q

これは基本的にVimを「exit」コマンド()を受け入れることができる状態に戻すことです:q。何が起こっているのかを見ることができなくても、Vimはまだキーの押下を処理しています。

別の回復方法は、新しいPowerShell端末を起動し、次を実行することです。

wsl ~ -e bash --noprofile --norc

これにより、問題のあるプロセスを処理せずにWSL(およびBash)が開始されるため、問題のあるプロセスを終了してからプロセスを編集して~/.bashrc問題を解決できます。ps auxwvi~/.bashrc

少なくとも3つの潜在的な修正があります。

  • 推奨事項:エイリアスを完全に削除してください。とにかくファイルを頻繁に編集しないので、このようなエイリアスはあまり役に立たないことがわかります。 Linuxでは、実際に編集する構成ファイルが何百ものでなくても数十個あるので、各ファイルにエイリアスを設定することは意味がありません。

  • エイリアスを維持するには、edit_my_prompt既存のコマンドや同様のコマンドと競合しないように名前を変更します。

  • または、最後の行(Starship呼び出し)を次のように変更します。

    eval "$(command starship init bash)"
    

    コマンドの前に置くと、エイリアスはcommand無視され、starship期待どおりに実際のコマンドが呼び出されます。また見てくださいエイリアスで隠されたコマンドの実行

関連情報