ssh遠程執(zhí)行命令的符號轉義問題
遠程執(zhí)行命令
- 前提條件
配置ssh免密碼登陸。
- 命令
ssh user@remote_host "cmd..."
- 腳本
ssh user@remote_host <<EOF
cmd1
cmd2
...
EOF
特殊字符的轉義
遠程執(zhí)行腳本的情況下,腳本中的內(nèi)容可視為是雙引號包含起來的。
遠程執(zhí)行命令的情況下,例如:ssh user@remote_host "${COMMOND}":
- 使用單引號的時候,$COMMAND定義的命令字符都會在本地被去掉特殊意義,只是一串完全沒有解析引用的字符串傳過去遠程主機;
- 如果是使用雙引號時,$COMMAND定義的特殊命令字符都會在本地被解析引用,比如上面COMMAND中的反引號、EXTRACT_DIR變量、i變量,所以此時要在COMMAND中的特殊字符前加上轉義符號“\”,這樣就會去掉在本地的解析引用;但是如果COMMAND變量中也有一個BAK_TIME變量引用前是不用加轉義符的,因為這個變量就是希望在本地引用的。
總結: ssh遠程執(zhí)行的命令中使用單引號時,所有變量、特殊字符都不會在本地解析引用,會原封不動地傳過去遠程主機;如果在命令中有變量或特殊字符在本地進行解析引用的,命令就得使用雙引號括起來,此時命令中不需要在本地解析引用的變量或特殊字符就需要在其前面加上轉義符“\”。

浙公網(wǎng)安備 33010602011771號