与另一个用户执行脚本行并访问该用户的$ HOME

时间:2015-07-01 10:27:22

标签: bash

我找到了很多针对该问题的部分解决方案,但不是针对该组合。所以这是计划:

#!/bin/bash
echo "current home »$HOME«"
sudo -u git -H /bin/bash << END_OF_SCRIPT
  GitToolsRepo=$HOME/git-tools
  echo "using git tools at »$GitToolsRepo«"
END_OF_SCRIPT
echo finally

使用sudo作为用户运行此脚本,不幸的是这总是放

current home »/home/auser«
using git tools at »«
finally

假设用户git的home设置为/var/lib/git,我希望

current home »/home/auser«
using git tools at »/var/lib/git«
finally

用户git没有设置登录shell(安全性)

我也试过

su -s /bin/bash git - << END_OF_SCRIPT

结果相同。

那么,如何在脚本中将一组脚本行作为不同的用户运行,并将其环境设置为在命令行上执行su -s /bin/bash git -时的环境设置?

使用{}

更加困难
#!/bin/bash
echo "current home »$HOME«"
su -s /bin/bash git - << END_OF_SCRIPT
  GitToolsRepo=${HOME}/git-tools
  echo "using git tools at »${GitToolsRepo}«"
END_OF_SCRIPT
echo finally

2 个答案:

答案 0 :(得分:1)

你需要在脚本输入块中转义$。

因此正确的脚本将是

#!/bin/bash
echo "current home »$HOME«"
sudo -u git -H /bin/bash << END_OF_SCRIPT
  GitToolsRepo=\$HOME/git-tools
  echo "using git tools at »\$GitToolsRepo«"
END_OF_SCRIPT
echo finally

答案 1 :(得分:1)

对于所有来到这里遇到同样问题的读者:我认为将其他用户的部分放在一个单独的脚本中并且在一行中有任一选项会好得多:

sudo -u user bash -c script.sh
sudo -u user script.sh
su user -c "bash script"

这是可调试的,没有丑陋的逃避