微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在单个 bash 变量中使用多个主机名?

如何解决如何在单个 bash 变量中使用多个主机名?

单机工作脚本

我在 .bashrc 中获取了以下 bash 脚本,并且在使用单个主机名 host1 时工作正常。 我可以毫无问题地执行 scp、rsync 和其他远程命令。 但我想将它用于多个主机名,例如。主机 1、主机 2、主机 3。

HPC_HOST=${HPC_HOST:-host1}

lastarg() {
    # get the last argument
    for last; do true; done; echo $last;
}

hpc() {
    HERE="~${PWD#$HOME}"
    ssh -t $HPC_HOST "cd $HERE; bash";
}

scp_to_hpc() {
    # Usage: scp_to_hpc files
    # Purpose: will copy file to crysden:$(pwd)/file
    #hpc_mkcwd
    HERE="~${PWD#$HOME}"
    scp $@ $HPC_HOST:$HERE
}


当前解决方

目前我创建了相同脚本的三个副本,并根据主机名相应地修改函数名称

预期的解决方

我希望必须有一种方法可以在上述脚本中调用多个主机名。 并使用 anyhost 执行命令。(可能我们还需要为主机名定义函数变量。

我也很欣赏在上述 bash 脚本中使用多个主机的可能想法。

解决方法

你可以在 bash 中使用字典,有多个键并设置值,当你想使用特定的键时,你可以检索它。

创建字典 declare -A test_var

添加不带引号的键/值字符串文字 test_var[key1]=value1

添加带引号的键/值字符串文字 test_var['key2']='value2'

使用 bash 变量添加键/值对

another_key_var='key3'
another_value_var='value3'
test_var[$another_key_var]=$another_value_var

在bash中检索键值对

echo ${test_var[key1]}
echo ${test_var[key2]}
echo ${test_var[$another_key_var]}

在 Bash 中更新字典中的现有键值 `test_var[key1]='another_value1'

在 Bash 中检查字典中是否存在键

if [ -v test_var[key1] ]; then
    echo "key1 exists in a dictionary"
fi

if [ ! -v test_var[key2] ]; then
    echo "key2 does not exists in a dictionary"
fi

从 Bash 字典中删除键值对

unset test_var[key1]
unset test_var['key2']
unset test_var[$another_key_var]

在 Bash 中迭代字典

for key in "${!test_var[@]}"; do
    echo "$key ${test_var[$key]}"
done

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。