我一直在努力創建一個腳本來將一些檔案從本地機器移動到遠程服務器。作為該程序的一部分,我有一個可以直接呼叫或使用“declare -fp”包裝并發送到 ssh 命令的函式。到目前為止,我的代碼如下所示:
export REMOTE_HOST=myserver
export TMP=eyerep-files
doTest()
{
echo "Test moving files from $TMP with arg $1"
declare -A files=(["abc"]="123" ["xyz"]="789")
echo "Files: ${!files[@]}"
for key in "${!files[@]}"
do
echo "$key => ${files[$key]}"
done
}
moveTest()
{
echo "attempting move with wrapped function"
ssh -t "$REMOTE_HOST" "$(declare -fp doTest|envsubst); doTest ${1@Q}"
}
moveTest $2
如果我用類似的東西運行腳本
./myscript.sh test dev
我得到輸出
attempting move with wrapped function
Test moving files from eyerep-files with arg dev
Files: abc xyz
bash: line 7: => ${files[]}: bad substitution
for 回圈的字串擴展似乎無法正常作業。這是預期的行為嗎?如果是這樣,是否有另一種方法來回圈遍歷可以避免此問題的陣列?
uj5u.com熱心網友回復:
如果您確信遠程帳戶的默認 shell 是 bash,則可能如下所示:
moveTest() {
ssh -t "$REMOTE_HOST" "$(declare -f doTest; declare -p $(compgen -e)); doTest ${1@Q}"
}
如果不是,則可能是:
moveTest() {
ssh -t "$REMOTE_HOST" 'exec bash -s' <<EOF
set -- ${@@Q}
$(declare -f doTest; declare -p $(compgen -e))
doTest \"\$@\"
EOF
}
uj5u.com熱心網友回復:
我設法在這里找到了答案:https : //unix.stackexchange.com/questions/294378/replacing-only-specific-variables-with-envsubst/294400
由于我正在匯出全域變數,因此我可以使用 compgen 獲取它們的串列,并將該串列與 envsubst 一起使用來指定要替換的變數。我完成的功能最終看起來像:
moveTest()
{
echo "attempting move with wrapped function"
ssh -t "$REMOTE_HOST" "$(declare -fp doTest|envsubst "$(compgen -e | awk '$0="${"$0"}"') '${1}'"); doTest ${1@Q}"
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405833.html
標籤:
上一篇:添加重定向到bash命令陣列
