bash - 环境变量可以在 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 多个脚本?谢谢
解决方案
环境变量是“与应用程序无关”的操作系统功能。在类 Unix 环境中,任何类型的程序都可以将环境变量传递给任何其他程序,即它的子程序。
这里真正的问题是五十个脚本是cron
从一个crontab
文件中运行的。这意味着他们不会继承该AUTOSQL
变量,即使它是由csh
登录脚本导出的。
看:
此外,在 ServerFault StackExchange 上:
推荐阅读
- python - 网络图错误:无法验证 StaticLayoutProvider(id='1058', ...).graph_layout:
- ruby-on-rails - 如何获取包含特殊字符的 Rails 参数
- php - 在 mySql INSERT 中使用 IF 语句
- java - 如何通过 Instagram 认证让应用下载 IG 视频?
- r - 通过循环两个表来应用函数
- git - 我可以使用 SSH 向 Github 进行身份验证,但是在尝试推送到我的仓库时我得到了一个权限被拒绝
- algorithm - 最终位移的总和(以 0 开头的字符串 + 以 1 开头的字符串)如何总是等于 num_zeroes * num_ones?
- python - Python 格式化字符串文字返回“SyntaxError:无效语法”
- single-sign-on - 使用 SSO 和基于浏览器的登录从 Python 连接到 Snowflake
- html - 如何在边框线和边框上方的对象之间添加空格 [html]