2013-08-28 255 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);