Bashで隠されたプログラムをどのように見つけることができますか?

Bashで隠されたプログラムをどのように見つけることができますか?

私が持っているとしましょうPATH="home/bob/bin:/usr/bin"。私は/home/bob/bin/fooいくつかの修正を/usr/bin/foo行った後。実際、実際のfooは複数の場所にある可能性があるので、PATHで探したいと思います。私の新しいfooスクリプトも私のパスにあるので、fooを呼び出すことはできず、これは再帰呼び出しを引き起こします。

Bashスクリプトでこれを行う簡単な方法はありますか? (PATH要素を繰り返して手動で検索する以外に?)

ベストアンサー1

以下を使用すると、いつでも2番目のパスを取得できますfoo

foo=$(type -Pa foo | tail -n+2 | head -n1)

(ファイルパスに改行文字が含まれていない場合)

これは相対パスであり、実行後は無効になりますcd

これにより、次のことができます。

hash -p "$foo" foo

だからそれ foo実行時に呼び出されますfoo

おすすめ記事