command not found: sed というエラー
command not found:
というエラー表示は時々見るが、この前ターミナル操作をしていたら、
command not found: sed
というエラーが出てきた。
sedが見つからない? ・・どういうこと?
いやいや、でも普通に sed --h
と打ち込んだり man sed
などとしてもきちんと表示されるので、sedコマンドがない、などということはなさそう。
しかし同じ操作をすると、やっぱり何度でも安心感を持ってそのエラーが再現される。
・・どういうこと?
具体的に何をしていたのかと言ったら、かつて .bashrc に書いていた、そして今は .zshrc に書いてある、短いシェルスクリプトの関数をターミナルから呼び出して動かしていたのだけど、たしかにというか、そのコードの中の sed
の段階になるとエラーで落ちてしまっている状況だった。
それは自分にとってはかなり有用な関数(というかツール)だったので、とりあえずはどんな手を使ってでも動いてほしく、もうその部分だけでもなんとか応急手当できないかと試行錯誤する中で which sed
をしたら /usr/bin/sed
だというから、その関数の中のsedを全部 /usr/bin/sed
に置き換えたらとりあえず動いた。
なんでやねん・・。
と思って、一旦その作業が落ち着いてからTwitterになんでやねん・・という感じのことを書いたら、詳しい方がこのようなことを教えてくれた。
zshは環境変数PATHと小文字のpath(PATHを:で分割した配列)が同期してるので、ローカル変数としてpath変数を使っているとPATHが意図せず書き換わっているという罠じゃないかなと思います。
— Koichi Nakashima (@ko1nksm) 2022年3月10日
え、ローカル変数・・おおお、たしかに! 思いっきり使っていた、変数名で path
。
で、とりあえずそれを path2
みたいにすると、あっさり消えた(普通に動いた)。なんという・・
本当にありがとうございましたありがとうございました。助かりました。🙏
で、今回 command not found: sed
でいくら検索してもこれにつながる情報が一向に出てこなかったので、とりあえずここに書いておいた。同じハマり方をする人が今後出てこないとも限らないので・・。
それでふと思い出したけど、以前にもほとんど同じようなNG変数名によるハマり方をしていたんだっけ・・。(このときはfi
)
もう5年前!