使用 AIX 的 ksh 实现以非交互模式读取配置文件脚本
Posted
技术标签:
【中文标题】使用 AIX 的 ksh 实现以非交互模式读取配置文件脚本【英文标题】:Reading profile script in non-interactive mode with AIX implementation of ksh 【发布时间】:2014-08-07 14:52:09 【问题描述】:请注意,这是一个与 AIX 相关的问题。
我有一个在 Redhat 上运行的 jenkins 服务器,它通过 SSH 在 AIX 服务器上运行一个节点。 这些命令使用 SSH 以非交互方式运行到 AIX 机器上以 ksh 作为其标准 shell 的用户。
问题是这个构建需要一些环境变量,我似乎无法让它工作。
我尝试过: Jenkins 允许我为会话设置一些环境变量。所以我尝试了:
ENV="$HOME/.profile"
我尝试创建一个包含
的 .kshrc 文件. .profile
但这些方法似乎都不能让 KSH 运行 .profile 脚本。
.profile 脚本包含我需要的用户的环境设置。
如何在执行命令之前获得 KSH 的 AIX 实现来运行我的 .profile 脚本?
【问题讨论】:
【参考方案1】:大多数 shell 不会在非交互式会话中获取其 .profile 文件。一个简单的解决方案是自己获取 .profile 作为您发送的命令的一部分。
所以不是
yourcommand1; yourcommand2
你应该发送
. ~/.profile; yourcommand1; yourcommand2
通过 ssh
阅读有关 Jenkins 控制 ssh 命令的评论后更新
如果您的 ssh 命令由 Jenkins 执行,您应该查看 https://wiki.jenkins-ci.org/display/JENKINS/SSH+Slaves+plugin,尤其是“登录配置文件”段落。
我会说这些解决方案之一是最好的
-
使用节点的配置页面从 Jenkins 设置所有环境变量。安装 EnvInject 插件来执行此操作。
围绕获取配置文件脚本的从站上的 java 命令编写一个包装器,并调整 JavaPath(也在节点的配置页面上)以指向该包装器。
【讨论】:
问题是我无法控制正在发送的命令。詹金斯会。 有没有办法让环境只获取配置文件脚本? 如果您实施选项 2,您应该能够获取配置文件脚本,然后启动 java。 对不起,我不清楚。如何让 KSH 在非交互模式下实际读取配置文件脚本的主要问题仍未得到解答。在创建案例之前,我已经找到了您在答案中描述的链接(我应该写在案例中,请原谅)。问题是我们定义了 8 个不同的 Java 版本,为它们创建包装器既不切实际又丑陋。如果包装脚本是解决此问题的唯一方法,那很好,就这样吧,但我宁愿让 KSH 处理它。【参考方案2】:你需要明确告诉 Jenkins 你想在ksh
shell 中执行它们。
默认情况下,Jenkins 以sh <commands>
运行。
在你的 shell 命令中添加一个 shebang 作为第一行,
#!/bin/ksh
【讨论】:
shell 不依赖于接收机器的 /etc/passwd 文件上的用户吗?【参考方案3】:我所知道的在 AIX 上设置适用于非交互式 shell 的环境变量的唯一方法是通过 /etc/environment。我相信这是正确的地方,但它当然适用于所有用户和所有 shell。
【讨论】:
以上是关于使用 AIX 的 ksh 实现以非交互模式读取配置文件脚本的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以在 Linux/AIX 中从 ksh 更改进程名称?
使用 ksh(AIX) 时如何在 awk 中调用变量? [复制]