BASH
我正在撰寫一個腳本來檢查選定主機上的服務以供選定用戶使用。選定的用戶存盤在一個陣列中。該腳本通過 ssh 連接到每個選定的主機,并將回圈遍歷登錄到每個選定用戶的陣列。但是,腳本無法在 ssh 期間讀取 for 回圈給定的陣列索引 - 它只需要陣列的第一個 (0) 索引。我已經嘗試了幾乎所有可能的參考、轉義等......當我在 echo 或“檢查”步驟中轉義 $j 變數時,出現syntax error: operand expected (error token is “$j”)錯誤。關于如何使其作業的任何想法?甚至有可能嗎?
usr1=("user1" "user2")
function tusr {
declare -n tmpp="$1";
echo "${tmpp[$j]}"
}
function testchk {
echo "Logging in as $myuser to $1"
ssh -tq $myuser@$1.bar.com "
for j in ${!usr1[@]}; do
echo \$j
echo ${usr1[$j]}
echo "Checking $(tusr usr1 "\$j"):"
done
"
}
srv="foo"
testchk "$srv"
當回顯轉義的 $j 時,它會列印出正確的值。
我的輸出:
0
user1
Checking user1:
1
user1
Checking user1:
預期輸出:
0
user1
Checking user1:
1
user2
Checking user2:
uj5u.com熱心網友回復:
遠程 shell 不知道您的本地變數或函式,因此您需要傳遞它們的宣告。
ssh -tq $myuser@$1.bar.com "
$(declare -p usr1)
$(declare -f tusr)
for j in \${!usr1[@]}
do
echo \"\$j\"
echo \"\${usr1[\$j]}\"
echo \"Checking \$(tusr usr1 \$j):\"
done
"
但是你想要做的是真正的混合事物并且令人困惑。您是否試圖讓遠程用戶在tusr本地執行該功能?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344998.html
