0

以下のように実行する必要があるUNIXシェルスクリプトがあります

test_sh XYZ=KLMN

スクリプトの内容は

#!/bin/ksh

echo $XYZ

XYZ の値を使用するためにset -k、スクリプトを実行する前に実行する必要があります。

スクリプトを実行する前に doint set -k なしでこれを行う方法はありますか。または、以下の方法でスクリプトを実行しているときに指定されたパラメーターの値を使用できるスクリプトでできることはありますか

test_sh XYZ=KLMN

私はkshを使用しています。どんな助けでも大歓迎です。

4

5 に答える 5

4

これを実行するのはどうですか?

XYZ=KLMN ./test_sh //running from directory where test_sh is
于 2009-10-15T11:38:10.383 に答える
3

あなたのスクリプトが他の引数を必要としない場合、それに対する手っ取り早い汚い方法は、

eval "$@"

スクリプトの開始時に。これにより、コマンド ライン引数がシェル コマンドとして評価されます。これらのコマンドがシェル/環境変数を割り当てる場合、それが実行されます。

コマンド ラインに何でも入力できるため、構文エラーから不適切なセキュリティ ホール (スクリプトが信頼されている場合) まで、問題が発生する可能性があるため、これは迅速で汚いものです。

「$@」が bash と同じ意味で ksh にあるかどうかはわかりません。$* (引用符なし) だけでも機能しますが、さらに汚れています。

于 2009-10-15T12:01:13.347 に答える
0

このオプションを試しています

#!/bin/ksh

echo $1
awk '{FS="=";print $2}' $1

そしてコマンドラインで

test_sh INSTANCE=LSN_MUM

しかし、awkは失敗しています。ここに問題はありますか?

于 2009-10-15T12:36:10.187 に答える
0

スクリプトで環境変数「INSTANCE」を使用しようとしているようです。

そのためには、スクリプトを実行する前に環境変数を設定する必要があります。「set」コマンドを使用すると、エクスポート可能な環境変数が設定されます。ちなみに、私のバージョンの ksh は 1993 年のもので、「-k」オプションは当時は廃止されていました。

スポーンされたシェルにエクスポートされるように環境変数を設定するには、次のように「エクスポート」コマンドを使用します。

export INSTANCE='whatever you want to put here'

スクリプトに位置パラメータを使用する場合、つまり、スクリプト内で「KLMN」値にアクセスし、それが最初のパラメータであると仮定すると、スクリプトで次のように実行します。

#!/bin/ksh

echo $1

次のように、後でスクリプトで使用するために、位置パラメーターをローカル変数に割り当てることもできます。

#!/bin/ksh

param_one=$1
echo $param_one

これは次のように呼び出すことができます:

test_sh KLMN

割り当てのスペースは重要であることに注意してください。スペースは使用しないでください。

于 2009-10-15T11:35:53.430 に答える