1

在 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)。

在此先感谢您的帮助。

4

1 回答 1

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 会话,因此我们不能将当前的变量和函数传递给新的会话。我建议您创建一个 shell 脚本,其中包含run-command并运行它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 "{}" +'
于 2019-01-07T16:29:52.753 回答