首页 > 解决方案 > 无法访问 bash 脚本函数中的配置文件变量

问题描述

我有一个配置和一个主要的 bash 脚本文件。配置文件具有分配了值的变量,而主文件想要访问它们。以下是我的文件,

配置文件

#!/bin/bash

username=abc
password=abc
hosts=(192.168.110.164);
walletname=varsh

主文件

#!/bin/bash
source ~/shell/config.sh

echo "$username"
echo "$walletname"

start_block(){
  echo "$username"
  echo "$walletname"
}

SCRIPT="$(declare -f); start_block"
for i in ${!hosts[*]} ; do
        printf "\t=========== Logging in ${hosts[i]} ===========\n\n"
        SCR=${SCRIPT/PASSWORD/${password}}
        sshpass -p ${password} ssh -l ${username} ${hosts[i]} "${SCR}"
done

$username并且$walletname可以从start_block函数外部访问,但不能从函数内部访问。函数的回显start_block给出空结果。我尝试export在配置中使用 before 变量名。如何访问这些变量?

编辑:

我想使用用户名密码登录到另一台主机,创建一些文件,使用配置文件变量运行安装和其他命令。配置中可能有很多变量。

标签: bashfunctionshellvariablesconfig

解决方案


您的变量不会发送到远程主机。您可以强制内联它们,就像您执行以下功能一样:

SCRIPT="$(env) ; $(declare -f) ; start_block"

但是,我建议直接内联配置:

SCRIPT="$(cat ~/shell/config.sh) ; $(declare -f); start_block"

推荐阅读