我需要能夠從腳本內運行腳本,但首先我需要ssh作爲不同的用戶,然後更改我的組。如何作爲不同的用戶ssh,更改組,並在Perl中運行腳本
我目前在做我的perl腳本中執行以下操作:
`ssh <user>@<host> ; newgrp <group> ; /script/to/run.pl`
運行此命令以命令行形式不縫切換組。我認爲這是因爲它正在變成一個新的外殼。
我該如何解決這個問題並使之運作?
此外,請注意,我沒有sudo/root privelages。
我需要能夠從腳本內運行腳本,但首先我需要ssh作爲不同的用戶,然後更改我的組。如何作爲不同的用戶ssh,更改組,並在Perl中運行腳本
我目前在做我的perl腳本中執行以下操作:
`ssh <user>@<host> ; newgrp <group> ; /script/to/run.pl`
運行此命令以命令行形式不縫切換組。我認爲這是因爲它正在變成一個新的外殼。
我該如何解決這個問題並使之運作?
此外,請注意,我沒有sudo/root privelages。
薩爾瓦,在他的答覆,回答我的問題:
sg $group -c '$cmd'
原因如下命令:
newgrp <int>
不起作用,因爲它創建了一個新的外殼。至少這是我最好的猜測。 「sg」命令解決了這個問題。
是的,更改當前用戶或組(su','sg','nwegrp','sudo'等)的實用程序總是會啓動一個新的shell。這是因爲程序無法更改其父進程的憑據。它只能改變自己,之後纔有後代繼承它們。 – salva
第一個分號由本地shell解釋。所以這三個命令在同一臺主機上運行。我想你想這
ssh <user>\@<host> "newgrp <grp>; /bin/run.pl"
我想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)。
'sg $ group -c'$ cmd'' – salva
這工作完美salva! – user3763392