克什“

克什“

以最简单的形式,我很困惑为什么这个脚本不能像使用 .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)来告诉您的 shell 不要在此处文档中执行扩展:

su - db2prd<<'EOF'
PARMDATE=1111111
echo parmdate
echo $PARMDATE
EOF

相关内容