0

私はこのような設定ファイルを持っています:

//filename : stat.conf
LAS_SERVER="127.0.0.1"
LAS_PORT=3306
LAS_USER=root
LAS_PWD=root
LAS_DB=test
CONN_STR_LAS_DB="-h$LAS_SERVER -P$LAS_PORT -u$LAS_USER -p$LAS_PWD $LAS_DB"

今、私は次のsourceようなコマンドを実行します:

$ source ./stat.conf

$ echo $CONN_STR_LAS_DB
testot.0.1

結果が間違っていることがわかります。私たちの期待ではありません。

対照的に、次のようにシェルでコマンドを実行すると、正しい結果を得ることができます。

$ LAS_SERVER="127.0.0.1"
$ LAS_PORT=3306
$ LAS_USER=root
$ LAS_PWD=root
$ LAS_DB=test
$ CONN_STR_LAS_DB="-h$LAS_SERVER -P$LAS_PORT -u$LAS_USER -p$LAS_PWD $LAS_DB"
$ echo $CONN_STR_LAS_DB
-h127.0.0.1 -P3306 -uroot -proot test

これは正しい結果です。

だから、私の質問は、「source./stat.conf」を使用したときに間違った結果が得られたのはなぜですか?

別のコンピューターで同じ操作をテストしましたが、正しい結果を得ることができます。コンピューターで構成するのに失敗したものはありますか?

私のOSはCentOS5です。

4

2 に答える 2

6

設定ファイルには、UNIXスタイル(\ nのみ)ではなく、Windowsスタイルの行末(\ r \ n)があります。dos2unixコマンドを使用して変換できます。次に、行末がおかしいファイルを作成しないテキストエディタに切り替えます。

于 2012-10-12T02:46:41.857 に答える
-2

私はあなたのシェルコードの何が問題なのか知っています。

これは環境変数の結果です。シェルスクリプトで宣言された$CONN_STR_LAS_DBは、このスクリプトの実行時間内にのみ存在できます。もちろん、このスクリプトの外部に$CONN_STR_LAS_DBをエコーすることはできません。

この問題を解決する方法は、変数を「エクスポート」することです。

export $CONN_STR_LAS_DB                

あなたのシェルスクリプトで、そしてそれは確かに行うことができます!幸運を!

于 2012-10-12T02:54:05.327 に答える