さまざまな*nixバージョンで実行できるようにシェルスクリプトを更新する必要があります。

さまざまな*nixバージョンで実行できるようにシェルスクリプトを更新する必要があります。

さまざまな*nixバージョン(red hat linux、hp ux、Solaris)で実行するように更新する必要があるkshスクリプトとcshスクリプトがたくさんあります。シェルは各サーバーにローカルにインストールされるため、各環境で機能する必要があります。

Linuxで特定のコマンドを見つけることができないという問題があります。たとえば、スクリプトを使用する場合、nawkLinuxではをに置き換える必要がありますgawk

/usr/xpg4/bin/grepSolarisではgrep-q(quiet)オプションは使用できませんが、Linux上のgrepはこの環境に存在する場合と存在しないため、スクリプトも使用されます/usr/xpg4/bin/grep

すべてのスクリプトに触れたくないので、より包括的なソリューションを探しています。

エイリアスを設定しようとしましたが、うまくいきます。ただし、対話型モードでのみ可能です。スクリプトにエイリアスを使用することはお勧めできません。

システムディレクトリにシンボリックリンクを追加できますが、この「最も」設定を管理するには管理者権限が必要であり、設定は移植できなくなります。

私はシステム管理に精通していないので、これらのニーズに合った標準的な解決策はないかもしれません。

書き換えることなく移植可能なスクリプトを持つにはどうすればよいですか?

ベストアンサー1

POSIX正しいアプローチは、互換性のあるコマンド(たとえば、awknotnawkまたはgawk、、grepnotを使用)、オプション、および構文に固執し、次のよう/usr/xpg4/bin/grepに設定することです。PATH

PATH=$(getconf PATH):$PATH

またはSolaris(以前のBourneシェルを使用している場合):

PATH=`getconf PATH`:$PATH

それがすべてです。ここで始まるスクリプトは変更されずに実行する必要があります。しかし、#!/bin/sh一般的な信念にもかかわらず、shebangを使用しないでください。いいえ POSIX遵守する。 Shebangをまったく使用しないでください。コンピュータがどのシェルを使用できるかをcommand -v sh確認するために使用できます。POSIX

しかし、移植不可能なスクリプトを変更せずに維持したいようです。その後、構文を使用して以前に提案されたコマンドアプローチを維持し、POSIXフロントエンドを追加して他のオペレーティングシステムから移植できないコマンドを処理できます。スクリプトはBourneまたはCshスタイルのシェルを使用しているため、エイリアスと関数は移植可能ではないため、独自のラッパースクリプトライブラリを使用してPATH

sh/ksh/bash/...:

PATH=~/bin:`getconf PATH`:$PATH 

コマンドライン:

set path = ( ~/bin `getconf PATH` $path)

-

mkdir -p ~/bin
cd ~/bin
cat > awk <<%
#!/bin/sh
PATH=`getconf PATH`:$PATH awk "$@"
%
ln -s awk nawk
ln -s awk gawk

おすすめ記事