2013-08-28 147 views
1

我试图在我的团队的服务器上编写一些脚本,并且遇到了一些困难。使用perl在一行中运行多个系统命令

对于我正在编写脚本的部分,我需要通过sudo su APPUSER让用户切换用户,然后运行几个命令。但是,sudo锁定在我们的服务器上,我无法运行如下所示的代码:sudo su APPUSER -c COMMAND。我已经要求修复,系统管理员总是说“不”。

我目前使用perl来编写脚本,我需要放入appuser而不是开发者的用户来运行三条命令。我可以在命令行上通过连续执行每个命令来完成它,但我不知道如何让perl来完成。

我该如何让perl在命令行上执行多个命令,其方式不会在上次执行后丢弃shell/state?即运行多个system呼叫不起作用。

+0

为什么不把这些命令在shell脚本,并使用Perl来运行? – SheetJS

+0

为什么perl当已经在shell中并只使用'system' –

+0

因为脚本无论是shell还是perl,最初都是作为dev用户执行的。除非手动完成,否则都不能成功下载到appuser,这是我希望避免的。 – Malfist

回答

0

这不行吗?

system("sudo su APPUSER && command1 && command2"); 
+0

不,这会以应用程序用户身份运行sudo su,然后在退出APPUSER的shell后运行command1和command2。 – Malfist

1

我找到了解决方案。

打开bash进程和读取和写入:

#!/usr/bin/perl 
use strict; 
use warnings; 

open(BASH, "|-", "bash"); 

print BASH "sudo su APPUSER\n"; 
print BASH "touch /home/APPUSER/sudobashtest\n"; 
close(BASH);