ご注意ください

  • 当ブログのコメントやトラックバックに、アカウントハックサイトや、そのようなサイトへリダイレクト(転送)される可能性が高いサイトへのリンクが時々貼られているようです。
    そのようなサイトへのリンクが貼られたコメント・トラックバックは、見つけ次第削除・禁止ワード登録していますが、今後も危険なサイトへのリンクが貼られる可能性がありますので、安易にリンク先へ飛ばないよう充分ご注意ください。

オンラインゲーム関連

著作権表示

  • 当ブログに記載されている
    会社名・製品名・システム名などは、
    各社の登録商標、もしくは商標です。

    当ブログ上の文章・写真・画像の
    無断転載、無断転用、直リンクなどは
    行わないでください。

    (C) 1998-2016 Vertex.
    (C) 2002-2016 SQUARE ENIX CO., LTD.
    (C) CAPCOM CO., LTD. 2007, 2016

    All Rights Reserved.
無料ブログはココログ

« [PHP] 文字列のつもりだったのに | トップページ | [PHP] Oracleと接続するために »

[ksh] パラメータが上書きされる?

とあるシェルスクリプトで、パラメータが取得できない!とヘルプが来たので、調べてみました。

どんな感じのシェルかというと…そのままは載せられないので、多少改変していますが、だいたいこんな感じ。

#!/bin/ksh
cd `/usr/bin/dirname $0`
export HOME=$PWD
. $HOME/ENV
SHID=`/usr/bin/basename $0`
. $HOME/cmd/myenv $SHID
echo $#
echo $1 $2 $3

これを何度試しても、パラメータがひとつしか取れず、しかもSHIDの値が出てくる、と。そんなことがあるのか!と試してみると、確かにSHIDの値が表示されるだけ。

2行目からひとつずつコメントアウトさせながら動きを見ていくと、どうやらmyenvを呼んでいるところをコメントアウトすると、正常に3つのパラメータが取得できる。逆にmyenvの行だけを有効にしたときでも、パラメータはひとつしか取れない。

ということで、myenvが原因と判明。でもこのファイルはSHIDを元にexportしているだけで、特に悪さをしているわけでもないのに…。

試しに、myenvを呼ぶ部分を関数にしてみると、今度は問題なく動く。

#!/bin/ksh
cd `/usr/bin/dirname $0`
export HOME=$PWD
. $HOME/ENV
SHID=`/usr/bin/basename $0`

function func_myenv {
. $HOME/cmd/myenv $1
}

func_myenv $SHID
echo $#
echo $1 $2 $3

どうやら、メインシェルのパラメータ変数?を、サブシェルが上書きしてしまっている様子。だから関数内で実行させれば、メインシェルのパラメータが上書きされないので正常に動くのか…。

いやはや、目からウロコでした。

« [PHP] 文字列のつもりだったのに | トップページ | [PHP] Oracleと接続するために »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/189342/46589906

この記事へのトラックバック一覧です: [ksh] パラメータが上書きされる?:

« [PHP] 文字列のつもりだったのに | トップページ | [PHP] Oracleと接続するために »

フォト
2017年5月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

最近のトラックバック