2017-04-18 50 views
2

可以在SSH heredoc 或命令中使用本地和遠程變量嗎?SSH - 無法在heredoc或命令中使用本地和遠程變量

下面是使用一個定界符的ssh腳本的示例(實際的腳本是更復雜的):

FILE_NAME被設置在本地服務器上要在遠程服務器上使用。

當在本地服務器上使用的遠程服務器上運行時,REMOTE_PID被設置。

FILE_NAME在腳本中被識別。 REMOTE_PID未設置。

如果EOF更改爲'EOF',REMOTE_PID已設置,則FILE_NAME不是。 (我不知道 爲什麼這是?)

有沒有一種方法可以識別REMOTE_PID和FILE_NAME?

使用bash的版本2。默認的遠程登錄是cshell,本地腳本是bash。

FILE_NAME=/example/pdi.dat 
ssh [email protected] bash << EOF 
# run script with output... 
REMOTE_PID=$(cat $FILE_NAME) 
echo $REMOTE_PID 
EOF 
echo $REMOTE_PID 

回答

3

你需要躲避$標誌,如果你不想要的變量加以擴展的更多信息:

你的情況
$ x=abc 
$ bash <<EOF 
> x=def 
> echo $x # This expands x before sending it to bash. Bash will see only "echo abc" 
> echo \$x # This lets bash perform the expansion. Bash will see "echo $x" 
> EOF 
abc 
def 

所以:

ssh [email protected] bash << EOF 
# run script with output... 
REMOTE_PID=$(cat $FILE_NAME) 
echo \$REMOTE_PID 
EOF 
+0

我覺得區別是如果您將'Y'更改爲'X',則更清楚。 – 123

+0

@ 123好主意,謝謝 –

+0

如果在第二個EOF之後運行echo $ X,應該顯示什麼?是否有可能在heredoc中設置變量並在外部使用? –