Aka*_*thi 13 ubuntu shell-script
我有一个场景,我必须切换到不同的用户,然后,我需要执行一些 Linux 命令。
我的命令是这样的
( echo myPassword | sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh
Run Code Online (Sandbox Code Playgroud)
但是使用这个命令,我切换到用户,下一个命令在前一个用户上触发。
是否有任何我可以使用 shell 脚本完成此操作
αғs*_*нιη 26
尝试。
sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh'
Run Code Online (Sandbox Code Playgroud)
看男人 sudo:
-H
-H (HOME) 选项请求安全策略将 HOME 环境变量设置为密码数据库指定的目标用户(默认为 root)的主目录。根据策略,这可能是默认行为。
-u 用户
-u(用户)选项使 sudo 以 root 以外的用户身份运行指定的命令。要指定 uid 而不是用户名,请使用 #uid。当以 uid 运行命令时,许多 shell 要求使用反斜杠 ('\') 对“#”进行转义。安全策略可能会将 uid 限制为密码数据库中列出的那些。只要未设置 targetpw 选项,sudoers 策略就允许密码数据库中没有的 uid。其他安全策略可能不支持这一点。
有了su user -c "sh /path/command.sh"
你可以运行一个命令的用户。
我用这个命令测试过:
echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"
Run Code Online (Sandbox Code Playgroud)
之后,它watch -n
作为 foobar 运行。
所以我认为你的命令应该是这样的:
echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"
Run Code Online (Sandbox Code Playgroud)
这里有一个较短的版本这里是 \xce\xb1\xd2\x93s\xd0\xbd\xce\xb9\xce\xb7\ 的答案:
\n\nsudo -Hu user command\n# example: sudo -Hu root fish\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
60535 次 |
最近记录: |