XPG*バージョンのコマンドはいつ使用する必要がありますか?

XPG*バージョンのコマンドはいつ使用する必要がありますか?

grep私は時々、基本バージョンは、次の古いSolarisシステムで動作します。POSIX互換grepコンピュータのデフォルト設定が必要なオプションをサポートしていないため、私のrcファイルに問題があります。

これは私の仕事のマシンであり、私は管理者ではないので、適切だと思われるように、最新/より良いバージョンのコマンドをインストールすることはできません。ところで、このマシンに適切な機能があることがわかりました。XPGgrep/usr/xpg4/bin/grep.

明らかに、次のコマンド(Solarisの場合)を使用してrcファイルの問題を解決できます。

alias grep='/usr/xpg4/bin/grep'

しかし、これを行う必要がないマシンはどうですか?私の目標は、Unixシリーズシステムに挿入して操作できる各シェルにrcファイルを持つことです。

この考えが聞きました...

  1. 使いたくない状況がありますか?XPGコマンドバージョン?
    • それではいつ?
  2. すべてのコンピュータのrcファイル/usr/xpg4/bin/の先頭に盲目的に追加$PATHし、XPG *バージョンの個々のコマンドのエイリアシングを省略することはできませんか?
    • それとも特定のコマンドで問題が発生しますか?
  3. この状況は/usr/xpg4/bin/「必要な」コンピュータにのみ存在しますか?
    • /usr/xpg4/bin/私のUbuntuコンピュータにはこれが存在しないことがわかったので、この質問をします。

概してこれは良い考えですか?

if [ -d "/usr/xpg4/bin" ]; then
  #Place XPG directory at beginning of path to always use XPG version of commands
  export PATH="/usr/xpg4/bin:$PATH"
fi

そうでなければなぜならないのですか?

答え1

/bin/usr/bin一部の商用Unixシステムには、POSIX互換ユーティリティを含むディレクトリだけでなく、以前のバージョンと互換性のあるユーティリティもあります。/usr/xpg4/binこのようにして、既存のアプリケーションはおよびPATHのみを使用して/bin既存のアプリケーションに固執することができ/usr/bin、最新のアプリケーションはPATHPOSIXユーティリティを最初に使用できます。 Unixシステムでは、1980年代のユーティリティとの下位互換性が必要でない限り、POSIXユーティリティを使用することをお勧めします。

私は、.profile次のディレクトリを/bin以前と/usr/bin存在する場合に配置しました。

/bin/posix
/usr/bin/posix
/usr/xpg6/bin
/usr/xpg4/bin
/usr/xpg2/bin

これには、少なくともSolaris、Tru64(Digital Unixとも呼ばれ、OSF / 1とも呼ばれます)、およびHP-UXが含まれていると思います。

PATHPATHを自動的に決定する代わりに、次のように呼び出してPOSIX依存関係に適したアプリケーションを見つけることができるはずです。getconf便利:

PATH=$(getconf PATH)

一部のシステム (*BSD や Linux など) は POSIX 互換ユーティリティーのみを提供するため、共通ディレクトリー ( /bin, /usr/bin) にあり、別個のディレクトリーは必要ありません。

答え2

まず、いいえあなたの質問に記載されているバージョンを使用してくださいalias。これは確かに最悪のオプションです。返品いいえすべてのプラットフォームにハードコードされたXPG4パスを追加します。

存在するソラリス/usr/xpg4/bin他のシステムディレクトリの前に定義すると、通常はよりPATH良いサービスを受けることができますbin。一般に、そのプラットフォームでは、XPG4標準バージョンのツールがより良い選択であると言いたいと思います。 (もう1つの重要な例はSolarisの「壊れ」です。)私はこのXPG4をSolarisプラットフォームに対してのみ定義して、そのプラットフォームを要求し、プロファイルに条件付きで設定することをおawk勧めします。PATH

の出力についてテストすることもできますが、あなたがしたようにディレクトリの存在をテストするのに問題はunameありません。/usr/xpg4/bin

答え3

POSIX.2、POSIX.2a、XPG4、SUSv2規格で要求されている動作が既存のSolarisユーティリティの動作と競合する場合、ユーティリティの元のSolarisバージョンは変更されずに残ります/usr/xpg4/bin。 POSIX.1-2001またはSUSv3でこの動作が必要な場合、または/usr/xpg4/binで新しい仕様バージョンを使用できます/usr/xpg6/bin。 SUSv3規格に準拠した新しいバージョンが付属しています/usr/xpg6/bin

標準互換ユーティリティを使用するアプリケーションは、PATHsh(1)またはksh(1))またはpathcsh(1))環境変数を設定して適切なフォルダを指定する必要があります。

答え4

使用しているシェルによっては、テスト可能なパラメータがある場合があり、OSTYPEOS関連の項目で埋めることができます。

if [[ $OSTYPE == solaris* ]]; then
  here be dragons
fi

または、複数のオペレーティングシステムを使用している場合

case $OSTYPE in
  freebsd*|solaris*)
    export MANWIDTH=tty
  ;;
  openbsd*)
    export "PKG_PATH=http://mirror.team-cymru.org/pub/OpenBSD/$(uname -r)/packages/$(uname -p)"
  ;;
esac

関連情報