gpt4 book ai didi

bash - Jenkins 无法访问 shell 别名

转载 作者:行者123 更新时间:2023-11-29 09:01:36 25 4
gpt4 key购买 nike

我已经配置了一个 Jenkins 作业以获取一个 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 命令的输出所示)?

最佳答案

对于遇到此问题的任何其他人,您可能需要设置 expand_aliases shell 选项,该选项在 Jenkins 中默认情况下似乎是关闭的:

shopt expand_aliases # check if it's on
shopt -s expand_aliases # set expand_aliases option to true
shopt expand_aliases # it should be on now

# test with a simple alias, should print 1
alias x="python -c 'print 1'"
x

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com