如何以其他用户的身份从脚本运行功能

时间:2019-01-07 15:57:00

标签: bash switch-user

在bash脚本中,我试图运行一个函数,该函数将命令行作为参数传递。因此,我尝试以其他用户身份通过​​find命令。

我有一个函数find,而不是直接运行run-command命令,该函数基本上运行并输出命令和结果。没什么复杂的。

我正在尝试运行以下命令:
su - ${USER} -c '$(run-command find ${DIR} -name TEST* -exec rm -rf "{}" +)'
但是失败了,消息错误:

我能够以其他用户身份运行find命令,如下所示:
-su - ${USER} -c '$(find ${DIR} -name TEST* -exec rm -rf "{}" +)'
-sudo -u ${USER} find ${DIR} -name "TEST*" -exec rm -rf "{}" +

当我用su命令切换到另一个用户时,似乎无法调用脚本的功能。

  • 我想在运行此命令行后继续以脚本的身份继续当前用户。
  • 我不想授予当前用户自己运行该命令的特权(在/etc/sudoers中无需修改)。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

su - ${USER} -c '$(run-command find ${DIR} -name TEST* -exec rm -rf "{}" +)'

您遇到的第一个问题是,该命令以已经登录的用户身份运行run-command...,然后将结果传递给su...。要修复此问题,只需将其更改为以下内容即可:

su - ${USER} -c 'run-command find ${DIR} -name TEST* -exec rm -rf "{}" +'

这里的下一个问题是su正在创建一个新的shell会话,因此我们无法将当前的变量和函数传递给新的会话。我建议您创建一个包含run-command的shell脚本,并从su -c...运行该脚本,将我们的最终命令添加到:

su - ${USER} -c '/path/to/run-command.sh find ${DIR} -name TEST* -exec rm -rf "{}" +'

su - ${USER} -c 'bash /path/to/run-command.sh find ${DIR} -name TEST* -exec rm -rf "{}" +'