在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
中无需修改)。预先感谢您的帮助。
答案 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 "{}" +'