首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问bash脚本函数中的配置文件变量

问无法访问bash脚本函数中的配置文件变量
EN

Stack Overflow用户
提问于 2020-11-16 07:05:38
回答 2查看 371关注 0票数 0

我有一个配置和一个主要bash脚本文件。配置文件有赋值的变量,而主文件想要访问它们。下面是我的档案

config.sh

代码语言:javascript
复制
#!/bin/bash

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

main.sh

代码语言:javascript
复制
#!/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。如何访问这些变量?

编辑:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-16 11:15:27

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

代码语言:javascript
复制
SCRIPT="$(env) ; $(declare -f) ; start_block"

不过,我建议直接插入配置:

代码语言:javascript
复制
SCRIPT="$(cat ~/shell/config.sh) ; $(declare -f); start_block"
票数 2
EN

Stack Overflow用户

发布于 2020-11-16 09:05:31

当您执行ssh -l ${username} ${hosts[i]} "${SCR}"时,该函数将被执行。因此,它是在一个单独的进程中执行的,即使在另一个主机上也很可能如此。当然你没有看到你的shell变量在那里。实际上,令人惊讶的是,在远程方面,start_block不会引起命令找不到错误,因为函数也只存在于您的本地进程中。

至于变量,您可以将它们转换为环境变量(使用export命令),并在ssh配置文件中使用SendEnv和AcceptEnv选项,例如,here。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64853880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档