我在將參數與空白從一個bash腳本傳遞到另一個bash腳本時會出現問題,這個腳本將通過ssh遠程運行。我有一個劇本,create-node.sh看起來像這樣:如果我使用ssh遠程執行其中一個腳本,如何在從一個腳本向另一個腳本傳遞參數時保留空格?
# create-node.sh
#!/bin/bash
function set_node_env_variables {
docker-machine ssh remote-machine 'bash -s' < ./set-env-variables.sh \
$ENV_VARIABLE_ONE \ # "foo bar"
$ENV_VARIABLE_TWO \ # feefi
$ENV_VARIABLE_THREE \ # "fo fum"
$ENV_VARIABLE_FOUR # huffpuff
}
create-node.sh將參數傳遞給set-env-variables.sh,這是遠程運行使用ssh,看起來像這樣:
# set-env-variables.sh
#!/bin/bash
i=0
argv=()
for arg in "[email protected]"; do
argv[$i]="$arg"
i=$((i + 1))
done
echo "export ENV_VARIABLE_ONE=${argv[0]}" >> /root/.profile #expected: "foo bar"; actual: foo
echo "export ENV_VARIABLE_TWO=${argv[1]}" >> /root/.profile #expected: feefi; actual: bar
echo "export ENV_VARIABLE_THREE=${argv[2]}" >> /root/.profile #expected: "fo fum"; actual: feefi
echo "export ENV_VARIABLE_FOUR=${argv[3]}" >> /root/.profile #expected: huffpuff; actual: fo
帶空格或特殊字符的環境變量在機器上用雙引號存儲,它將使用ssh執行set-env-variables.sh,否則我根本不使用引號。
如何在將參數從create-node.sh傳遞給set-env-variables.sh時如何在使用ssh遠程執行set-env-variables.sh時保留空格?
「......我根本不使用引號」。這是一個錯誤。你需要(至少)用dbl-quotes包圍所有變量名('$ VAR1'),即。 '「$ VAR1」'。祝你好運。 – shellter
不幸的是,我通過帶引號的參數傳遞的變量名仍然不能保留空白。 –
在空格之前轉義字符「\」? – L30n1d45