gpt4 book ai didi

bash - 错误的 stdio 转发规范 '%h:%p' '

转载 作者:行者123 更新时间:2023-12-05 02:14:45 25 4
gpt4 key购买 nike

[操作系统 - macOS, shell - Bash]

我有一个小的 bash 脚本,它根据输入参数生成一个 ssh 命令。生成的命令是:

ssh -o ProxyCommand='ssh <bastion_name> -W %h:%p' -A -D <port> <username>@<destination_host_name>

脚本将此命令存储在变量 cmd 中,其中

cmd="ssh -o ProxyCommand='ssh $1 -W %h:%p' -A -D $3 $4@$2"

其中 $1 = bastion_name,$2 = destination_host_name,$3 = port 和 $4 = username。

然后它会尝试执行如下命令,

echo "Executing --> $cmd"
$cmd

但它因以下错误而终止,

Bad stdio forwarding specification '%h:%p''

但由于我正在回应 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[@]}"

了解有关引用的更多信息 here .

@edit:从单引号中取出 $1 部分,因为 OP 的意图是扩展它。修复了执行 --> 行。

关于bash - 错误的 stdio 转发规范 '%h:%p' ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53082071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com