![克什“](https://linux22.com/image/61741/%E5%85%8B%E4%BB%80%E2%80%9C.png)
以最简单的形式,我很困惑为什么这个脚本不能像使用 .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