最も単純な形式では、ユーザーを変更するために.hereスクリプトを使用して、このスクリプトが期待どおりに機能しない理由が混乱していますsu - user <<EOF
。
su - db2prd<<EOF
PARMDATE=1111111
echo parmdate
echo $PARMDATE
EOF
出力を生成します。
parmdate
su/EOF 部分を取り外します。
PARMDATE=1111111
echo parmdate
echo $PARMDATE
生産する:
parmdate
1111111
環境が設定されていないと仮定すると、ksh変数の割り当てが機能しない理由とその動作方法がわかりません。検索できるすべてを試しました。このセクションの変数割り当てが壊れているようですsu - <<EOF
。
これは、いくつかのメンテナンス活動のためにユーザーを切り替える大規模スクリプトの例にすぎません。
答え1
変数はここのドキュメント(<<...
)で説明されているので、評価したくない変数はエスケープする必要があります。
su - db2prd<<EOF
PARMDATE=1111111
echo parmdate
echo \$PARMDATE
EOF
あるいは、より良い方法は、区切り文字(ここでEOF
)を引用して、シェルがこの文書で拡張を実行しないように指示することです。
su - db2prd<<'EOF'
PARMDATE=1111111
echo parmdate
echo $PARMDATE
EOF