Function 使用ksh默认shell将shell函数作为用户导出到su

Function 使用ksh默认shell将shell函数作为用户导出到su,function,export,ksh,su,Function,Export,Ksh,Su,我遇到的情况是,只有root用户可以mailx,只有ops可以重新启动进程。我想制作一个自动脚本,既可以重新启动流程,也可以发送一封关于这样做的电子邮件 当我使用函数尝试此操作时,函数为“未找到” 我有点像: #!/usr/bin/bash function restartprocess { /usr/bin/processcontrol.sh start } export -f restartprocess su - ops -c "restartprocess" mailx -s "

我遇到的情况是,只有root用户可以mailx,只有ops可以重新启动进程。我想制作一个自动脚本,既可以重新启动流程,也可以发送一封关于这样做的电子邮件

当我使用函数尝试此操作时,函数为“未找到”

我有点像:

#!/usr/bin/bash

function restartprocess {
/usr/bin/processcontrol.sh start
}

export -f restartprocess

su - ops -c "restartprocess"

mailx -s "process restarted" myemail.mydomain.com < emailmessage.txt

exit 0
(这当然是对真实脚本的简化)

假设用户ops的默认shell是ksh,我不能更改它或修改sudoers,那么有没有一种方法可以导出一个函数,以便我可以su为ops(并且我需要运行ops的概要文件)并执行该函数

我确保ops用户有权访问我希望它执行的脚本目录,并有权运行该脚本


任何关于这方面的教育都将不胜感激

导出函数有很多限制,尤其是 与具有不同帐户和不同外壳的
su-…
相结合

相反,将脚本翻过来,并将所有命令 这将在调用shell中的函数内运行

类似:(bash和ksh)

#/usr/bin/bash
函数重启过程{
/bin/su-ops-c“/usr/bin/processcontrol.sh启动”
}
如果重新启动进程;然后
mailx-s“进程已重新启动”\
myemail@mydomain.com

这将隐藏
/bin/su
函数中的所有
/restartprocess
处理,并且可以随意扩展。

导出函数有很多限制,尤其是 与具有不同帐户和不同外壳的
su-…
相结合

相反,将脚本翻过来,并将所有命令 这将在调用shell中的函数内运行

类似:(bash和ksh)

#/usr/bin/bash
函数重启过程{
/bin/su-ops-c“/usr/bin/processcontrol.sh启动”
}
如果重新启动进程;然后
mailx-s“进程已重新启动”\
myemail@mydomain.com

这将隐藏
/bin/su
函数中的所有
/restartprocess
处理,并且可以随意扩展。

我是否可以假设
导出-f restartprocess
(而不是
导出-f restartprocess
)在您的帖子中是一个打字错误,而不是在您的实际代码中?如果是,请更正您的上述问题。它还可能有助于包含“未找到函数”消息的确切文本。祝你好运。我能假定这是你的帖子中的一个输入错误,而不是你的实际代码中的一个输入错误吗?如果是,请更正您的上述问题。它还可能有助于包含“未找到函数”消息的确切文本。祝你好运,谢谢你。我会投赞成票,但显然我还没有被允许这样做。你仍然应该能够接受答案(正如你所要求的),或者如果没有,就如何改进提供反馈。另外,请尝试在其他一些stackexchange网站上花费时间,并填写您的个人资料。谢谢。我会投赞成票,但显然我还没有被允许这样做。你仍然应该能够接受答案(正如你所要求的),或者如果没有,就如何改进提供反馈。此外,请尝试在其他一些stackexchange站点上花费时间,并完成您的个人资料。
su - ops -c "/usr/bin/processcontrol.sh start"