别名没有任何效果

时间:2017-03-06 13:41:20

标签: linux git shell jenkins jenkins-pipeline

我有一个Jenkins管道脚本。

在其中,这有效:

@OneToMany(orphanRemoval = true

但是,如果我尝试:

sh("/my/path/to/git status")

OR

sh("alias git='/my/path/to/git' && git status")

这些不能工作:sh("alias git='/my/path/to/git'") sh("git status")

我想让第二和第三段代码也能正常工作。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这些行

sh("alias git='/my/path/to/git'")
sh("git status")

创建两个子shell。第一个创建别名,然后立即退出。第二个启动时不知道前一个shell或它的别名。

以前的版本

sh("alias git='/my/path/to/git' && git status")
即使&&替换为;

也无法在本地交互式shell中工作 - 显然别名在当前命令结束之前不会生效列表。

如果必须使用别名,则应在启动shell时将其添加到任何shell文件(.bashrc.profile等等)。但请注意,除非shopt -s expand_aliases,否则无法在非交互式shell中扩展别名。

否则,通常的解决方案是将/my/path/to添加到$PATH

答案 1 :(得分:1)

不允许连续的sh调用保持状态(包括环境变量)。

在项目中创建一个脚本,并在单个sh指令中调用它,或使用:

sh """
  alias git='/my/path/to/git'
  git status
"""