我已经配置了一个Jenkins作业来提供一个bash脚本,该bash脚本提供另一个bash脚本,该bash脚本在其用户的.bashrc中添加了一个别名,并提供了.bashrc本身,然后原始脚本尝试使用该别名(由第二个设置)。但是,它似乎无法找到它刚刚创建的别名。除了使用“通过SSH发送文件或执行命令”构建步骤来获取脚本之外,我没有使用任何脚本插件。

这项工作是这样做的:

source ./test_script.sh
test_script.sh看起来像这样:
echo "In test_script.sh"
echo $USER
echo $HOME
source ./setup_env.sh
echo "\nBack in test_script.sh"
alias foo
foo

最后,setup_env.sh看起来像这样:
echo "\nIn setup_env.sh"
echo "alias foo=\"echo foobar\"" >> $HOME/.bashrc
source $HOME/.bashrc 2>/dev/null
cat $HOME/.bashrc

我从 Jenkins 工作中收到的输出看起来像这样:
In test_script.sh
my_user
/home/my_user
\nIn setup_env.sh
...all of my bashrc...
alias foo="echo foo"
\nBack in test_script.sh
alias foo='echo foo'
./test_script.sh: line 7: foo: command not found

当我可以在命令行上愉快地运行它并看到它成功时,我不明白为什么会这样。 Jenkins显然可以找到新别名时,为什么不能使用它(如alias foo命令的输出所示)?

最佳答案

\n命令的输出中显示的echo建议这不是在bash下运行,正如您所期望的那样。

请检查 jenkins 用户的设置
(或与他一起运行Jenkins的任何其他用户)-
特别是默认 shell 的设置。

要对此进行测试,请在脚本开头添加以下行之一:

env

或者
env | grep -i shell

还应该考虑确保您的脚本在正确的 shell 程序下运行,
通过在每个脚本的第一行中添加“ shebang ”行。
例如,对于“bash”,您应该添加以下第一行:
#!/bin/bash

(这不是评论,尽管自动语法突出显示可能会认为...)

关于bash - Jenkins无法访问Shell别名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18019335/

10-14 19:45
查看更多