gpt4 book ai didi

arrays - 通过 SSH 执行存储在关联数组中的 bash 命令,存储结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:47 25 4
gpt4 key购买 nike

对于不相关的大型项目,我需要从本地系统或远程系统收集系统统计信息。由于我以任何一种方式收集相同的统计信息,因此我通过将统计信息收集命令存储在 Bash 关联数组中来防止代码重复。

declare -A stats_cmds
# Actually contains many more key:value pairs, similar style
stats_cmds=([total_ram]="$(free -m | awk '/^Mem:/{print $2}')")

我可以像这样收集本地系统统计信息:

get_local_system_stats()
{
# Collect stats about local system
complex_data_structure_that_doesnt_matter=${stats_cmds[total_ram]}
# Many more similar calls here
}

我的脚本的一个先决条件是 ~/.ssh/config 的设置使得 ssh $SSH_HOSTNAME 在没有任何用户输入的情况下工作。我想要这样的东西:

get_remote_system_stats()
{
# Collect stats about remote system
complex_data_structure_that_doesnt_matter=`ssh $SSH_HOSTNAME ${stats_cmds[total_ram]}`
}

我已经尝试了单引号、双引号、反引号等我能想到的所有组合。某些组合会导致 stats 命令执行得太早(bash: 7986: command not found),其他组合会导致语法错误,其他组合会返回 null(stats 命令两边的单引号)但没有一个会存储正确的结果在我的数据结构中。

如何通过 SSH 在远程系统上评估存储在关联数组中的命令,并将结果存储在本地脚本的数据结构中?

最佳答案

确保您存储在数组中的命令在分配数组时不会展开!

另请注意,在嵌套单引号时,必须使用外观复杂的引号样式。参见 this所以张贴解释。

stats_cmds=([total_ram]='free -m | awk '"'"'/^Mem:/{print $2}'"'"'')

然后只需启动您的 ssh 即可:

sh "$ssh_hostname" "${stats_cmds[total_ram]}"

(是的,我将你的变量名小写了,因为 Bash 中的大写变量名真的很恶心)。然后:

get_local_system_stats() {
# Collect stats about local system
complex_data_structure_that_doesnt_matter=$( ${stats_cmds[total_ram]} )
# Many more similar calls here
}

get_remote_system_stats() {
# Collect stats about remote system
complex_data_structure_that_doesnt_matter=$(ssh "$ssh_hostname" "${stats_cmds[total_ram]}")
}

关于arrays - 通过 SSH 执行存储在关联数组中的 bash 命令,存储结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24334927/

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