加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 跨多个脚本定义公共变量?

发布时间:2020-12-16 01:48:33 所属栏目:安全 来源:网络整理
导读:我有许多与功能无关的 Bash和Perl脚本,但它们的相关之处在于它们在同一个项目中工作. 它们在同一个项目中工作的事实意味着我通常指定相同的目录,相同的项目特定命令,每个脚本顶部的相同关键字. 目前,这并没有让我感到困惑,但我明白将所有这些值集中在一个地
我有许多与功能无关的 Bash和Perl脚本,但它们的相关之处在于它们在同一个项目中工作.
它们在同一个项目中工作的事实意味着我通常指定相同的目录,相同的项目特定命令,每个脚本顶部的相同关键字.

目前,这并没有让我感到困惑,但我明白将所有这些值集中在一个地方会更容易,如果有什么变化我可以更改一次值并让各种脚本接受这些变化.

问题是 – 如何最好地宣布这些价值观?每个脚本中“必需”的单个Perl脚本对Perl脚本的更改要求较少,但不提供Bash脚本的解决方案.使用“key = value”格式的配置文件可能更通用,但要求每个脚本解析配置并有可能引入问题.还有更好的选择吗?使用环境变量?或者Perl可以轻松执行和解释的Bash特定方式?

解决方法

当您运行shell脚本时,它在子shell中完成,因此它不会影响父shell的环境.因此,当您将变量声明为key = value时,其范围仅限于子shell上下文.您想通过执行以下操作来获取脚本:

. ./myscript.sh

这在当前shell的上下文中执行,而不是作为子shell.

从bash手册页:

. filename [arguments]
source filename [arguments]

Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.

If filename does not contain a slash,file names in PATH are used to find the directory containing filename.

您还可以使用export命令创建全局环境变量.导出管理哪些变量可用于新进程,所以如果你说

FOO=1
export BAR=2
./myscript2.sh

那么$BAR将在myscript2.sh的环境中可用,但$FOO不会.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读