我正在Jenkins管道中运行shell脚本,我想将由日期创建的最新文件名列打印到文本文件中,我不想打印时间和日期列等,仅9位之后的内容即文件名并打印到txt文件中。
代码如下:
注意:当我在bash中运行这些命令都可以正常工作时,会添加\,因为Jenkins似乎不喜欢没有美元符号的$在shell中都可以正常运行。
放在外壳中的输出是这样的:
bash.sh
home
testfile.txt
blabla.csv
rtyuioiuytrty.xml
像上面的我想在Jenkinsfile中打印。 Jenkins似乎不喜欢运行以下代码:我也尝试过此循环
node ('node') {
stage ('SSH To server') {
sshagent(credentials: ['sshkey']) {
script {
sh"""ssh -o StrictHostKeyChecking=no user@servername << EOF
if [ \$? -ne 0 ]; then
echo " Error while connecting SSH "
exit 1
fi
cd ${SOURCE_PATH}
if [ \$? -ne 0 ]; then
echo "Error while doing change directory \${SOURCE_PATH} "
exit 1
fi
ls -lrt | grep "$(date '+%b %e')" |awk '{ s =""; for (i = 9; i <= NF; i++) s = s $i " "; print }'
exit
EOF
"""
答案 0 :(得分:0)
欢迎来到詹金斯逃脱的地狱:-)
以下命令可能会为您提供帮助
node(''){
sh "touch test.txt"
sh """ls -lrt | grep \"\$(date '+%b %e')\" |awk '{ s =\"\"; for (i = 9; i <= NF; i++) s = s \$i \" \"; print s }'"""
}
要点是,您必须转义双引号和美元。
更新后的代码段的答案为
sh"""ssh -o StrictHostKeyChecking=no user@servername << EOF
if [ \$? -ne 0 ]; then
echo \" Error while connecting SSH \"
exit 1
fi
cd \${SOURCE_PATH}
if [ \$? -ne 0 ]; then
echo \"Error while doing change directory \${SOURCE_PATH} \"
exit 1
fi
ls -lrt | grep \"\$(date '+%b %e')\" | awk '{ print \\\$9}'
exit
EOF
"""