「rbenv」Rubyバージョンマネージャのオープンソースコードを読んでいましたが、このライブラリのコマンドの1つを見ました。インストールされてgawk
いることを確認してくださいawk
:
awk="$(type -p gawk awk 2>/dev/null | head -n1)"
if [ -z "$awk" ]; then
echo "rbenv: cannot find awk" >&2
return 1
fi
しかし、bash
ファイルの上部にもshebangが表示されます。
#!/usr/bin/env bash
awk
最初に、shebangが私たちがスクリプト内で実行されていることを保証したら、それを実行できると仮定できるはずだと思いました。しかし、後でこれがシェルコマンドではなくUNIXコマンドであることがbash
わかりました。awk
UNIXシステムではない(Windowsなど)文書でこのスクリプトを実行します。 ~からこのリンクgawk
、私はこれがUNIXではなくシステムで最も一般的なスタイルであると推測します。awk
awk
私たちがインストールされたと仮定できないのは、それがUNIXコマンドであり、UNIXシステムで実行されない可能性があるためです。また、インストールされてgawk
いないシステム(UNIXシステム以外のシステムなど)で見つけることができると予想されるawk
最も可能性の高い代替項目であるため、確認していますか?
ベストアンサー1
awk
たとえば、後でコードでその変数を使用することもできます。"$awk" 'script' file
それ以外の場合は、書く必要がありますif ! type -p gawk awk >/dev/null 2>&1; then ...error...
。その変数を使用している場合は、PATHで最初のgawkまたは他のawkを使用し、変数がない場合は作成できます。awk 'script' file
PATHで古いgawkを見逃すこともあります。
ああおおよそそうだ。もう少し見ると彼らのコード:
awk="$(type -p gawk awk 2>/dev/null | head -n1)"
if [ -z "$awk" ]; then
echo "rbenv: cannot find awk" >&2
return 1
fi
# shellcheck disable=SC2016
"$awk" '
/^Summary:/ {
summary = substr($0, 10)
next
}
したがって、彼らが本当に望むのは、PATHでawkまたはgawkの最初のバージョンを見つけて使用することです。両方が存在しない場合、失敗するのはIMHOに対する防御的な事後の考慮です。