grep
私は時々、基本バージョンは、次の古いSolarisシステムで動作します。POSIX互換。grep
コンピュータのデフォルト設定が必要なオプションをサポートしていないため、私のrcファイルに問題があります。
これは私の仕事のマシンであり、私は管理者ではないので、適切だと思われるように、最新/より良いバージョンのコマンドをインストールすることはできません。ところで、このマシンに適切な機能があることがわかりました。XPGgrep
/usr/xpg4/bin/grep
.
明らかに、次のコマンド(Solarisの場合)を使用してrcファイルの問題を解決できます。
alias grep='/usr/xpg4/bin/grep'
しかし、これを行う必要がないマシンはどうですか?私の目標は、Unixシリーズシステムに挿入して操作できる各シェルにrcファイルを持つことです。
この考えが聞きました...
- 使いたくない状況がありますか?XPGコマンドバージョン?
- それではいつ?
- すべてのコンピュータのrcファイル
/usr/xpg4/bin/
の先頭に盲目的に追加$PATH
し、XPG *バージョンの個々のコマンドのエイリアシングを省略することはできませんか?- それとも特定のコマンドで問題が発生しますか?
- この状況は
/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
、最新のアプリケーションはPATH
POSIXユーティリティを最初に使用できます。 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が含まれていると思います。
PATH
PATHを自動的に決定する代わりに、次のように呼び出して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
。
標準互換ユーティリティを使用するアプリケーションは、PATH
(sh(1)
またはksh(1)
)またはpath
(csh(1)
)環境変数を設定して適切なフォルダを指定する必要があります。
答え4
使用しているシェルによっては、テスト可能なパラメータがある場合があり、OSTYPE
OS関連の項目で埋めることができます。
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