詹金斯向 bash shell 脚本添加单引号
Jenkins adding single quotes to bash shell script
我的 shell 脚本如下所示:
#!/bin/bash
USER=
sudo rm -rf /home/$USER/system/logs/*
exit 0
它已签入 shell 文件夹中的 cvs,Jenkins 配置为通过 'Execute Shell' 构建步骤的作业在 Linux 机器上执行它:
bash -ex shell/clear-logs.sh myuser
但是 Jenkins 将整个 sudo 行用单引号括起来,这导致我的日志文件没有被删除(尽管 Jenkins 作业成功通过):
[workspace] $ /bin/sh -xe /tmp/hudson7785398405733321556.sh
+ bash -ex shell/clear-logs.sh myuser
+ USER=myuser
+ sudo rm -rf '/home/myuser/system/logs/*'
+ exit 0
知道詹金斯为什么这样做吗?如果我以 root 用户身份从 Jenkins 工作区位置调用脚本,那么它工作正常。
编辑:
我有相同的 shell 脚本,在不同的 cvs 模块中,由 Jenkins 在同一 linux 服务器上执行。已经创建了一个新的工作,无论是自由式还是通过复制现有的工作,但没有区别。
好的,似乎已通过将 'jenkins' 用户添加到 'myuser' 组并重新启动 jenkins 服务来解决此问题。如果日志目录为空,则 Jenkins 控制台输出会报告单引号中的路径,因为找不到文件。但是运行第二次作业里面有文件,没有单引号,文件正确删除。
适配/home/$USER/...
的权限我一开始在控制台输出中得到如下信息:
+ USER=geri
+ rm -rf '/home/geri/so-30802898/*'
rm: cannot remove ‘/home/geri/so-30802898/*’: Permission denied
Build step 'Execute shell' marked build as failure
调整权限后 build/deletion 成功。
Jenkins 没有对您的引号做任何事情,例如将双引号更改为单引号 - 您看到的是 set -x
的输出。在您的 shell:
中试试这个
set -x
ls "some string with spaces"
输出将类似于:
+ ls --color=auto 'some string with spaces'
bash
只是向您展示其解释和命令标记化的调试输出。
我的 shell 脚本如下所示:
#!/bin/bash
USER=
sudo rm -rf /home/$USER/system/logs/*
exit 0
它已签入 shell 文件夹中的 cvs,Jenkins 配置为通过 'Execute Shell' 构建步骤的作业在 Linux 机器上执行它:
bash -ex shell/clear-logs.sh myuser
但是 Jenkins 将整个 sudo 行用单引号括起来,这导致我的日志文件没有被删除(尽管 Jenkins 作业成功通过):
[workspace] $ /bin/sh -xe /tmp/hudson7785398405733321556.sh
+ bash -ex shell/clear-logs.sh myuser
+ USER=myuser
+ sudo rm -rf '/home/myuser/system/logs/*'
+ exit 0
知道詹金斯为什么这样做吗?如果我以 root 用户身份从 Jenkins 工作区位置调用脚本,那么它工作正常。
编辑:
我有相同的 shell 脚本,在不同的 cvs 模块中,由 Jenkins 在同一 linux 服务器上执行。已经创建了一个新的工作,无论是自由式还是通过复制现有的工作,但没有区别。
好的,似乎已通过将 'jenkins' 用户添加到 'myuser' 组并重新启动 jenkins 服务来解决此问题。如果日志目录为空,则 Jenkins 控制台输出会报告单引号中的路径,因为找不到文件。但是运行第二次作业里面有文件,没有单引号,文件正确删除。
适配/home/$USER/...
的权限我一开始在控制台输出中得到如下信息:
+ USER=geri
+ rm -rf '/home/geri/so-30802898/*'
rm: cannot remove ‘/home/geri/so-30802898/*’: Permission denied
Build step 'Execute shell' marked build as failure
调整权限后 build/deletion 成功。
Jenkins 没有对您的引号做任何事情,例如将双引号更改为单引号 - 您看到的是 set -x
的输出。在您的 shell:
set -x
ls "some string with spaces"
输出将类似于:
+ ls --color=auto 'some string with spaces'
bash
只是向您展示其解释和命令标记化的调试输出。