2013-05-16 124 views
1

我有兩個正在運行的腳本。一個從客戶端工作站運行並在服務器上調用腳本。我需要從服務器腳本變量,我想我可以做這種方式,但它不工作:從SSH服務器分配變量到本地機器變量

#!/bin/sh 

local_var="" 

ssh [email protected] " $local_var=\$server_var " 

echo "$local_var" 

我local_var的輸出爲null。有沒有辦法做到這一點?

回答

3

嘗試:

local_var=$(ssh [email protected] "echo ${server_var}") 
+0

我'我仍然測試這個,但我認爲這可能是解決方案 –

+0

我沒有這個運氣,我試着按照你的方式打字,但我的變量仍然是空的,我也嘗試添加這樣的空間:local_var = $(ssh user @ server「echo $ {server_var}」) –

+0

你確定在遠程系統上設置了server_var嗎? – devnull

2

是的,您需要打印變量名稱和值,然後源輸出。舉個例子:

$ source <(ssh [email protected] 'echo foo=\"$bar\"') 
$ echo $foo 
bar 

這部作品慶典,它可能無法在不支持命令輸出重定向到source彈工作。對於這些shell,您可能需要先創建一個臨時文件。

+0

'源<(...)'是EVAL的'替代...'?有趣...... – anishsane

+0

在這個上得到一個錯誤......「意外的令牌附近的語法錯誤'('...' –

+1

看起來你的本地系統不支持'<(...)'語法... – anishsane

1

我打算讓3個假設:

  1. 遠程機器是一臺Linux機器。
  2. 您知道遠程腳本實例的進程ID。
  3. 你想要的變量是在遠程進程的環境中。

假設以上,以下應工作:

local_var=$(ssh [email protected] bash -c ' 
    while IFS="=" read -d '' -r name value; do 
    [[ $name = "server_var" ]] && echo $server_var && break 
    done' < /proc/$REMOTE_SCRIPT_PROC_ID/environ)