将shell函数导出为su作为具有ksh默认shell的用户

时间:2012-09-10 02:42:43

标签: function export ksh su

我有一种情况,只有root可以mailx,只有操作可以重启进程。我想制作一个自动脚本,重启过程并发送一封关于这样做的电子邮件。

当我使用函数尝试此功能时,“找不到”功能。

我有类似的东西:

#!/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。

我尝试将脚本更改为在ksh中运行,并将“export -f”更改为“typeset -xf”,但仍未找到该函数。喜欢: ksh:找不到导出功能

我终于放弃了,只是调用了脚本(直接在函数中)并且有效。它就像:

su - ops -c "/usr/bin/processcontrol.sh start"

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

鉴于用户ops的默认shell是ksh而我无法更改或修改sudoers,有没有办法导出一个函数,以便我可以作为ops(我需要运行ops的配置文件)并执行该操作功能

我确保ops用户拥有我希望它执行的脚本目录的权限,以及运行该脚本的权限。

任何关于此的教育都将受到赞赏!

1 个答案:

答案 0 :(得分:0)

出口功能有很多限制,尤其如此 与su - ...结合使用不同的帐户和不同的shell。

相反,将您的脚本内部翻出并放入所有命令 这将在调用shell中的函数内运行。

类似的东西:( bash和ksh都是)

#!/usr/bin/bash

function restartprocess {
    /bin/su - ops -c "/usr/bin/processcontrol.sh start"
}

if restartprocess; then
    mailx -s "process restarted" \
        myemail@mydomain.com < emailmessage.txt
fi

exit 0    

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