Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 詹金斯可以';t访问shell别名_Bash_Jenkins_Hudson - Fatal编程技术网

Bash 詹金斯可以';t访问shell别名

Bash 詹金斯可以';t访问shell别名,bash,jenkins,hudson,Bash,Jenkins,Hudson,我已经配置了一个Jenkins作业来生成一个bash脚本,该脚本生成另一个bash脚本,该脚本向其用户的.bashrc添加别名,并生成.bashrc本身,然后原始脚本尝试使用该别名(由第二个别名设置)。但是,它似乎找不到刚刚创建的别名。除了使用“通过SSH发送文件或执行命令”构建步骤来生成脚本之外,我没有使用任何脚本插件 这项工作是这样做的: source ./test_script.sh test\u script.sh如下所示: echo "In test_script.sh" echo

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

这项工作是这样做的:

source ./test_script.sh
test\u script.sh
如下所示:

echo "In test_script.sh"
echo $USER
echo $HOME
source ./setup_env.sh
echo "\nBack in test_script.sh"
alias foo
foo
echo "\nIn setup_env.sh"
echo "alias foo=\"echo foobar\"" >> $HOME/.bashrc
source $HOME/.bashrc 2>/dev/null
cat $HOME/.bashrc
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
最后,
setup\u env.sh
如下所示:

echo "In test_script.sh"
echo $USER
echo $HOME
source ./setup_env.sh
echo "\nBack in test_script.sh"
alias foo
foo
echo "\nIn setup_env.sh"
echo "alias foo=\"echo foobar\"" >> $HOME/.bashrc
source $HOME/.bashrc 2>/dev/null
cat $HOME/.bashrc
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作业收到的输出如下所示:

echo "In test_script.sh"
echo $USER
echo $HOME
source ./setup_env.sh
echo "\nBack in test_script.sh"
alias foo
foo
echo "\nIn setup_env.sh"
echo "alias foo=\"echo foobar\"" >> $HOME/.bashrc
source $HOME/.bashrc 2>/dev/null
cat $HOME/.bashrc
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
命令的输出所示)

显示在
echo
命令输出中的
\n
如您所料,建议这不是在
bash
下运行

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

要测试这一点,请在脚本开头添加以下行之一:

env

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

#!/bin/bash

(这不是一个注释,不管auto syntax highlighter会怎么想……)

对于有此问题的任何其他人,您可能需要设置
展开\u别名
shell选项,Jenkins默认情况下该选项为关闭:

shopt展开别名#检查它是否打开
shopt-s expand_alias#将expand_alias选项设置为true
shopt扩展别名,现在应该打开了
#使用简单别名测试,应打印1
别名x=“python-c‘打印1’”
x
请参见