用于自动交付的shell脚本,带有git操作[duplicate]

jxct1oxe  于 5个月前  发布在  Git
关注(0)|答案(1)|浏览(38)

此问题在此处已有答案

Are shell scripts sensitive to encoding and line endings?(16个回答)
7天前关闭
我是sh脚本的新手,我想做一些事情。我想自动化我的交付(最后一步是标记),我真的不知道怎么做。我尝试了一些事情,但我有一个问题
我想要的:

  • 我有一个文件与回购网址和文件夹在哪里拉. ex:
https://gitlab.toto.com/api_tata|api_tata
https://gitlab.toto.com/frontend_tata|frontend_tata

字符串
我想在每个仓库循环,拉上发布分支,更改版本号,与主分支合并。
第一步我尝试了类似的东西(在本地克隆一个repo来执行合并和推送)

#!/bin/bash

PROJECTS_LIST="projects.txt"
DIRBASE="."

cd "$DIRBASE"

if [ ! -f "$PROJECTS_LIST" ]; then
   echo "The projects file ($PROJECTS_LIST) does not exist."
   read -p "Press Enter to exit..."
   exit 1
fi

while IFS=';' read -r REPO DIR || [[ -n "$REPO" ]]; do
   echo "Repo: $REPO"
   echo "DIR: $DIR"

   if [ -z "$REPO" ] || [ -z "$DIR" ]; then
       echo "Invalid format in the line: $REPO;$DIR"
       continue
   fi

   read -p "Press Enter to clone the repository..."

   # clone repo
   git clone "$REPO" "$DIR"

   if [ $? -eq 0 ]; then
       echo "Cloning successful."
   else
       echo "Cloning failed."
   fi

   read -p "Press Enter to continue..."
done < "$PROJECTS_LIST"


这里是我输入的日志和错误:

Repo: https://gitlab.toto.com/api_tata
DIR: api_tata
fatal: could not create work tree dir 'api_tata?': Invalid argument
Cloning failed.


我不知道为什么我在API_tata后面有这个“?”字符?
如果你能帮我的话?
谢谢你,谢谢

brvekthn

brvekthn1#

这可能意味着DIR以一个不可见的字符结尾。根据我的经验,它通常是一个回车符(\r)。
通过在某处添加此来确认它

echo "$DIR" | od -c

字符串
它转储不可见的内容(注意API_tata后面的\r

0000000    a   p   i   _   t   a   t   a  \r  \n
0000012


然后使用tr中的任意一个更正DIR以删除特定字符

git clone "$REPO" "$(tr -d '\r' <<< "$DIR")"


或删除除已接受符号外的所有符号

git clone "$REPO" "${DIR//[^a-zA-Z0-9-_]}"

相关问题