使用heredoc在bash脚本sudo中设置变量

时间:2018-04-20 19:30:30

标签: bash sudo su

我试图运行一个切换用户的脚本(this answer之后)。我无法在此设置变量。我尝试了很多东西,但最基本的是:

sudo -u other_user bash << EOF
V=test
echo "${V}"
EOF

更现实地说,我正在做类似以下的事情:

sudo -u other_user bash << EOF
cd
V=$(ls)
echo "${V}"
EOF

每当我尝试使用变量V时,它都会被取消。如何设置变量?

1 个答案:

答案 0 :(得分:2)

要抑制heredoc中的所有扩展,请引用sigil - 即<<'EOF',而不是<<EOF

sudo -u other_user bash -s <<'EOF'
cd
v=$(ls)      # aside: don't ever actually use ls programmatically
             #        see http://mywiki.wooledge.org/ParsingLs
echo "$v"    # aside: user-defined variables should have lowercase names; see
             #        http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html
             #        fourth paragraph ("the name space of environment variable names
             #        containing lowercase letters is reserved for applications.")
EOF

如果要传递变量,请在-s之后传递它们,并在heredoc脚本中以位置方式引用它们(如$1$2等)。