LoginSignup
3
0

More than 3 years have passed since last update.

Fish shellアップデート時のエラー対応

Posted at

UbuntuのパッケージをアップデートしたらFish shellがエラーを吐くようになった

最近(2020/02/25)、Ubuntuのアップデートリクエストに従ってアップデートを行ったところ、Fish shellの起動時に次のようなエラーが発生するようになった。aptの履歴によるとfish shellが更新されている。

発生しているエラー

~/.config/fish/functions/fish_prompt.fish (line 162): Expected a string, but instead found a '&'
      git rev-parse --quiet --verify HEAD > /dev/null ^&1; or set empty 1
                                                       ^
from sourcing file ~/.config/fish/functions/fish_prompt.fish
in command substitution
source: Error while reading file '/home/dev-user/.config/fish/functions/fish_prompt.fish'
Welcome to fish, the friendly interactive shell

また、エラーだけでなく、プロンプトも次のようにいつもと違う表示になっている。

dev-user@thinkpad /home/dev-user >

自分の環境の場合、$HOMEにいるときは「 > 」のようにシンプルに表示されるのが正しい。

環境

Ubuntu 18.04.4 LTS
fish-common:amd64 (3.0.2-1~bionic, 3.1.0-1~bionic)
fish:amd64 (3.0.2-1~bionic, 3.1.0-1~bionic)

ThinkPad X1C 2017にUbuntuをデスクトップOSとしてネイティブインストールしています。
ターミナルソフトはterminator 1.91を使っています。

応急処置

原因と思われる
~/.config/fish/functions/fish_prompt.fish
の162行目は次のようになっている。

      git rev-parse --quiet --verify HEAD > /dev/null ^&1; or set empty 1

「^&1」の部分が問題の様子。
fishで「^」はエラー出力を表しているようなので(参照)、ディスクリプタの合成をやろうとしてミスしているのだろうと想像して次のように変更。

      git rev-parse --quiet --verify HEAD > /dev/null 2>&1; or set empty 1

とりあいず、エラーは消えている。

解釈

今回はエラー出力を標準出力に合成し、その結果をnullに渡すことによってすべての出力を非表示にして対応した。試しに標準出力を消さないパターンに変更したところ、フォルダを移動するたびにgit rev-parse ~~のコマンドが実行され、HEADと差分があるgit管理下のディレクトリではリビジョンなのかハッシュ文字列のようなものが表示されるようになった。プロンプトにそんな表示が現れるのはおかしな状況のため、エラー出力も含めて非表示にするのが実装者の意図だったのだと想像して上記対応を行ったけれど、あくまでご利用は自己責任で。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0