「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に対する防御的な事後の考慮です。
答え2
bashとawk(またはgawk)の間には固定関係はありません。ただし、どちらも実行可能なプログラムであり、いくつかのPATH
パスに存在する可能性があり、どちらもオープンソースであり、無料でGNUによって開発されました。
GNU 実行可能ファイルは UNIX システムで完全に有効で使用できます。 Solarisシステムでは通常bash(オペレーティングシステムが提供する基本リストに複数回)、大丈夫です。そしてbashはほとんどのPOSIX要件に準拠しています。例:MacOSはPOSIX認証を取得するためにbashを使用します。
LinuxはUNIXの哲学に固執しようとするオペレーティングシステムです。 GNUがGNU is not Unix
次のように定義されている唯一の理由は、Linuxが非独占。
あなたは言う:awkがUNIXコマンドであることを確認しました。:はい。 Linux命令でもあります。そしてLinuxで使用されるAndroidでと数百以上のバージョンオペレーティングシステムすべてが* nixです。返品:Windowsなどはい、WindowsでもUnix層を使用できます。また、GNU awk は *nix システムで最も一般的な awk バージョンです。はい、Windowsは* nixではなく少数のオペレーティングシステムの1つです。
インストールできない理由awk
は、一部のシステム開発者がnawk
「最良の選択肢」(たとえ類似していても)としてインストールすることを決定できるからですawk
。これにより、開発者が作成したコンテンツが破損する可能性があります。awk
gawk
rbenv
1次のような赤いニシンに陥らないでください。 Linuxただカーネル。一般にLinuxと呼ばれるのは、Linusによって開発されたカーネルと、一般にGNUのオープンソースユーザーツールセットを備えたオペレーティングシステムです。