[操作系统 - macOS,外壳 - Bash]
我有一个小的 bash 脚本,它根据输入参数生成 ssh 命令。生成的命令是:
ssh -o ProxyCommand='ssh <bastion_name> -W %h:%p' -A -D <port> <username>@<destination_host_name>
Run Code Online (Sandbox Code Playgroud)
该脚本将此命令存储在变量 cmd 中,其中
cmd="ssh -o ProxyCommand='ssh $1 -W %h:%p' -A -D $3 $4@$2"
Run Code Online (Sandbox Code Playgroud)
其中 $1 = 堡垒名称、$2 = 目标主机名称、$3 = 端口、$4 = 用户名。
然后它尝试执行命令,例如
echo "Executing --> $cmd"
$cmd
Run Code Online (Sandbox Code Playgroud)
但它因以下错误而终止,
Bad stdio forwarding specification '%h:%p''
Run Code Online (Sandbox Code Playgroud)
但由于我回显了 cmd,因此我直接在终端中复制粘贴,并且它运行时没有任何错误。
请注意,bastion_name 是通过 ssh 配置解析的,该配置具有为该堡垒主机定义的用户名和其他属性。
因为显然命令是正确的,所以这里有什么问题?
尽量不要使用 eval,因为它是邪恶的。
始终引用您的变量(除非您有理由不这样做)。从来不$cmd总是"$cmd"。
使用 bash 数组:
cmd=(ssh -o ProxyCommand='ssh '"$1"' -W %h:%p' -A -D "$3" "$4@$2")
echo "Executing -->" "${cmd[@]}"
"${cmd[@]}"
Run Code Online (Sandbox Code Playgroud)
在此处了解有关引用的更多信息。
@edit:将$1部分从单引号中取出,因为OP的意图是扩展它。修复了执行 --> 行。
| 归档时间: |
|
| 查看次数: |
15570 次 |
| 最近记录: |