Linux

期望嵌入在 shell 中的腳本:如何指定遠端 shell 中定義的值?

  • November 2, 2019

一、問題描述:

我有一個腳本需要 ssh 到遠端伺服器並執行一些腳本。

但是在嘗試使用遠端伺服器中定義的值時遇到了一些麻煩。

我使用“ $ ”來引用遠端伺服器中定義的值,但它表示該值未定義……

2.錯誤資訊:

在此處輸入圖像描述

3. 腳本:

#!/bin/bash  
myusrname="xxx"
myhost="xxx"
mypsword="xxx"

/usr/bin/expect<<-EOF
spawn ssh -o "StrictHostKeyChecking=no" $myusrname@$myhost
expect "*password*"
send "$mypsword\r"
expect "*#*"
send "tst=\"just a test string\"\r"
expect "*#*"
send "echo \$tst\r"
EOF

如果你想$tst被遠端 shell 解釋,你需要在本地 shell 中expect 本地 shell 中轉義它,因為你使用不帶引號的 EOF 來允許擴展本地 shell 變數$mypassword

所以試試

send "echo \\\$tst\r"

這樣,本地 shell 中的 here-doc 將輸出\and $,並且expect會看到\$tst

你不能定義這樣的tst變數。看看這個問題

該命令是 TCL 腳本而不是 bash。嘗試使用以下內容:

set tst "just a test string"
send "echo \$tst\r"

如果您使用列印,您可以看到輸出puts

puts $tst

引用自:https://unix.stackexchange.com/questions/549832