【发布时间】:2018-03-08 18:28:09
【问题描述】:
简介
我正在编写一个从 Jenkins Pipeline 执行的 bash 脚本。 Groovy DSL 对我来说不是问题,我使用的是裸 shell 命令。
到目前为止,对于每个命令,我一直在使用 bash -c 并传递了我想要的命令,如下所示:
ssh -l <user> <host> bash -c "'
cd /my/path
./script.sh param1 param2
echo $MY_VAR
'"
效果很好。
问题
现在我有一个更复杂的命令:
ls -1t | egrep 'regexp' | tail -n +10 | xargs rm -rf
基本上列出一些目录并删除除最后 10 个以外的所有项目。它在 bash 中使用,但在 bash -c 中不起作用。
我也尝试了 for-loop 版本:
for f in $(ls -1t | egrep 'regexp' | tail -n +10); do rm -rf $f; done;
但它也不起作用。 我收到一个错误,例如:
bash: line 4:
for f in <actual_item1> <actual_item2> <actual_item3>; do echo <actual_item1>; done;
No such file or directory
所以$ 变量分辨率存在一些问题。如何克服这一点?
或者我如何使 piped 版本工作?
【问题讨论】:
-
请edit 您的问题显示您正在运行的实际 ssh 命令,并且引号和变量引用完好无损。这可能只是让您的报价正确的问题。
-
不是引号。
bash -c在通过此管道时不起作用(我不知道为什么),但通过<< EOF会有所帮助。
标签: bash jenkins ssh jenkins-plugins jenkins-pipeline