Bitbucket Pipeline中Bash脚本无法去除回车符问题求助
Bash脚本在Bitbucket Pipeline中出现多余回车符问题
我编写了一段Bash脚本,功能是读取CSV文件、查找指定行并将结果拼接为字符串。该脚本在本地Git Bash中运行完全正常,但在Bitbucket Pipeline执行时会产生多余的回车符,我尝试了多种方法都无法去除,已经困扰多日。
我的Bash脚本
function getTestClassLst(){ file="apex-cls-map.csv" while IFS="," read -r col_clsname col_clsList do if [[ $col_clsname == $1 ]]; then textsize=$(expr length $col_clsList) if [[ $textsize -gt 1 ]]; then unitclsLst=$(echo "$col_clsList" | sed "s/.cls//g") fi fi done < <(tail -n +2 $file) } function getTstForClassFromCommit(){ clsLst="" unitclsLst="" while read line; do #filter only for classes if [[ $line == *.cls ]]; then clsname=${line#*classes/} getTestClassLst $clsname echo "## test class : $unitclsLst" fi #filter for trigger if [[ $line == *.trigger ]]; then triggername=${line#*triggers/} getTestClassLst $triggername echo "## test class for trigger : $unitclsLst" fi #check if matched found (not empty) if [ ! -z "$unitclsLst" ]; then #check if test class not already included if [[ $clsLst != *$unitclsLst* ]]; then clsLst+="$unitclsLst," echo "## list : $clsLst" fi fi done < cpath.txt #remove last char which is a , cl=${clsLst%?} #remove " from string for those with multiple test class for one class echo "## TEST_CLS_LST = $cl" | sed 's/"//g' }
其中getTestClassLst函数遍历CSV文件并返回指定列的值,getTstForClassFromCommit函数遍历文本文件中的文件名并在CSV中检索对应内容。
本地Git Bash运行结果
## test class : User_DMN_TEST ## list : User_DMN_TEST, ## test class for trigger : DocuSignStatus_DMN_TST ## list : User_DMN_TEST,DocuSignStatus_DMN_TST, ## test class for trigger : DocuSignStatus_DMN_TST ## TEST_CLS_LST = User_DMN_TEST,DocuSignStatus_DMN_TST
Bitbucket Pipeline运行结果
## test class : User_DMN_TEST ## list : User_DMN_TEST , ## test class for trigger : DocuSignStatus_DMN_TST ## list : User_DMN_TEST ,DocuSignStatus_DMN_TST , ## test class for trigger : DocuSignStatus_DMN_TST ## TEST_CLS_LST = User_DMN_TEST ,DocuSignStatus_DMN_TST
已尝试但无效的去回车符方法
echo "## TEST_CLS_LST = $cl" | sed -e 's/"//g' -e 's/\n//g' echo "## TEST_CLS_LST = $cl" | sed -e 's/"//g' -e 's/\\n//g' echo $(tr -d '\n' < testCls.lst) # 将字符串存入文件后替换并显示 # 将字符串存入数组,替换数组分隔符为,后显示文本 IFS=',';echo "${arrayOfCls[*]}";IFS=$' \t\n'
内容的提问来源于stack exchange,提问作者vanessen
相关产品推荐
相关产品推荐

