我有一个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")
我想让第二和第三段代码也能正常工作。我怎么能这样做?
答案 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
"""