我不确定是否有可能。我有一个informix数据库,我需要从数据库触发器启动一个bash脚本。在informix documentation中解释了如何启动用户过程,但它必须是一个存储过程;我想在本地计算机上启动一个用户程序。
答案 0 :(得分:2)
您可能不想这样做 - 因为运行程序会很慢 - 但是如果您决定仍然想要这样做,那么您将使触发器运行存储过程,并且存储过程将使用SYSTEM语句执行bash脚本。
CREATE PROCEDURE trivial(c varchar(30) default "hello world")
DEFINE cmd VARCHAR(60);
LET cmd = "echo " || c || " >/tmp/hello.world 2>&1";
SYSTEM cmd;
END PROCEDURE
请注意,该脚本没有标准输入或标准输出的终端或标准错误(另外,我认为它得到/dev/null
)。另请注意,我显示的命令充满了权限问题 - 运行该过程的第二个用户可能会在文件上获得权限错误。您还需要警惕'Unix注入攻击' - 显示的代码采用脚本调用者提供的字符串,然后运行它。如果字符串包含后引号或...则用户可以执行命令。对自己来说运行命令可能不是很好,但要对我刚刚展示的内容持怀疑态度。
如果脚本以非零状态退出,则存储过程将失败,并显示错误-668和与退出状态对应的ISAM错误。