2014-06-21 14 views
1

我需要能夠從腳本內運行腳本,但首先我需要ssh作爲不同的用戶,然後更改我的組。如何作爲不同的用戶ssh,更改組,並在Perl中運行腳本

我目前在做我的perl腳本中執行以下操作:

`ssh <user>@<host> ; newgrp <group> ; /script/to/run.pl` 

運行此命令以命令行形式不縫切換組。我認爲這是因爲它正在變成一個新的外殼。

我該如何解決這個問題並使之運作?

此外,請注意,我沒有sudo/root privelages。

+1

'sg $ group -c'$ cmd'' – salva

+0

這工作完美salva! – user3763392

回答

1

薩爾瓦,在他的答覆,回答我的問題:

sg $group -c '$cmd' 

原因如下命令:

newgrp <int> 

不起作用,因爲它創建了一個新的外殼。至少這是我最好的猜測。 「sg」命令解決了這個問題。

+1

是的,更改當前用戶或組(su','sg','nwegrp','sudo'等)的實用程序總是會啓動一個新的shell。這是因爲程序無法更改其父進程的憑據。它只能改變自己,之後纔有後代繼承它們。 – salva

2

第一個分號由本地shell解釋。所以這三個命令在同一臺主機上運行。我想你想這

ssh <user>\@<host> "newgrp <grp>; /bin/run.pl" 
0

我想OP想要構建一個字符串來執行Perl,注意反引號。不知道,但OP可能不得不使用:

$s='ssh <user>@<host> ; newgrp <group> ; /script/to/run.pl'; # Normal single quotes not backticks 
exec($s); 

OP,有不同的方式從Perl腳本執行shell函數。你用反引號。還有exec($ s)和system($ s)。

相關問題