首页 > 解决方案 > 环境变量可以在 2 种不同的 shell 类型之间共享吗?

问题描述

我进入一个环境,当用户登录我们的系统时,他们默认使用 csh 登录。我们还有一个自动登录(我们称之为“自动登录”),默认情况下也会调用 csh。

此登录用于执行(通过其 crontab)我们用于与供应商发送和接收文件的所有脚本(50+)。这些单独文件传输的结果用于为每次传输提供仪表板。

仪表板只是为每个文件传输提供一个指示灯(如果最后一个文件传输成功,则为绿灯,如果失败,则为红色)。使用 tsql -H 连接从脚本设置此成功/失败状态(在 SQL Server 数据库中)。

我们目前使用的是 SQL Server 2008,但正在升级到 2016。所以我需要将 50 多个脚本的 tsql 连接从 sql_2008 更改为 sql_2016。我有使用可以使用的环境变量(比如说 AUTOSQL)的想法。

然后我可以更改所有 50 多个脚本以引用 AUTOSQL,而不是 sql_2008,然后将环境变量设置为 sql_2008/sql_2016/ 以及我们将来升级到的任何内容。正如我之前提到的,所有用户都使用 csh 作为默认 shell 登录。我遇到的问题是所有的 shell 脚本都是用 bash 编写的。

如何设置环境变量供 bash(我们的自动化)脚本使用,所以当我们将来升级时,我只需要更改一个环境变量的值,而不是更改为 50 多个脚本?谢谢

标签: bashenvironment-variablescsh

解决方案


环境变量是“与应用程序无关”的操作系统功能。在类 Unix 环境中,任何类型的程序都可以将环境变量传递给任何其他程序,即它的子程序。

这里真正的问题是五十个脚本是cron从一个crontab文件中运行的。这意味着他们不会继承该AUTOSQL变量,即使它是由csh登录脚本导出的。

看:

我在哪里可以设置 crontab 将使用的环境变量?

此外,在 ServerFault StackExchange 上:

https://serverfault.com/questions/337631/crontab-execution-doesnt-have-the-same-environment-variables-as-executing-user


推荐阅读