Linux
期望嵌入在 shell 中的腳本:如何指定遠端 shell 中定義的值?
一、問題描述:
我有一個腳本需要 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