【发布时间】:2022-11-24 02:26:13
【问题描述】:
对 bash 很陌生。我正在尝试编写一个文件来简化对环境列表之一运行 sshuttle 命令的过程。
#!/bin/bash
declare -A environments
environments=(
[dev]="dev.myhost.com 10.0.1.0/22 --dns"
[qa]="qa.myhost.com 10.0.2.0/22 --dns"
[prod]="prod.myhost.com 10.0.3.0/22 --dns"
)
vpn() {
echo sshuttle --verbose -r ${environments[$1]}
sshuttle --verbose -r ${environments[$1]}
}
用法将是vpn qa,它应该解析为sshuttle --verbose -r qa.myhost.com 10.0.2.0/22 --dns
不幸的是,当运行 vpn qa 时,我得到一个错误,表明 ${environments[$1]} 在运行时没有被解析:
usage: sshuttle [-l [ip:]port] -r [user@]sshserver[:port] <subnets...>
sshuttle: error: at least one subnet, subnet file, or -N expected
echo 输出我期望看到的内容,并将其复制粘贴到终端中。
我错过了什么?谢谢。
【问题讨论】:
-
你是如何运行这个功能的?脚本|函数参数问题?
-
@Ivan 我运行
source ./sshuttle_vpn.sh来获取 bash 文件。然后只需在终端上输入vpn qa。回显显示命令应运行的样子。 -
你的 shell 是 bash 吗?
-
@EricP 还请注意概要,由于手册 sshuttle.readthedocs.io/en/stable/manpage.html#synopsis,我建议将
--dns选项从[qa]="qa.myhost.com 10.0.2.0/22 --dns"移动到命令中-r ${environments[$1]}之前的某个位置。 -
@Vab,将 --dns 移动到 -r 之前没有任何区别
标签: bash