Итак, я хотел клонировать несколько репозиториев, я просто поместил его в al oop вот так
#! /bin/sh # Begin code git_repo=('https://aur.archlinux.org/stm32cubemx.git' 'https://aur.archlinux.org/ncurses5-compat-libs.git' 'https://aur.archlinux.org/google-chrome.git' 'https://aur.archlinux.org/stm32pio.git') aur_clone(){ for repo in ${git_repo[@]} do git clone $repo done } aur_clone
Но я также хочу изменить текущую папку на папку git во время l oop поэтому я делаю это так
#! /bin/sh # Begin code git_name=('stm32cubemx' 'ncurses5-compat-libs' 'google-chrome' 'stm32pio') git_repo=('https://aur.archlinux.org/stm32cubemx.git' 'https://aur.archlinux.org/ncurses5-compat-libs.git' 'https://aur.archlinux.org/google-chrome.git' 'https://aur.archlinux.org/stm32pio.git') aur_clone(){ for repo in ${git_repo[@]} do for name in ${git_name[@]} do git clone $repo cd "$name" cd .. done done } aur_clone
Но каждый раз, когда он oop, клон, в котором он продолжает печатать файл, существует. Я хотел бы, чтобы вы, ребята, показали мне, где я не прав в своем коде, чтобы я мог улучшить себя
Первый цикл for повторяется по всем git_repo.
for
git_repo
Второй цикл по всем git_names. Вместо дублирования, вы должны сопоставить оба имени с правильным URL-адресом.
git_names
Однако вы можете использовать некоторое расширение параметров оболочки , чтобы отделить имя git от URL-адреса:
$ url='https://gitlab.com/example_repo.git' $ echo "${url##*/}" | cut -f1 -d"." example_repo
Используя это, ваш скрипт станет чем-то вроде этого;
#! /bin/sh # Begin code git_repo=('https://aur.archlinux.org/stm32cubemx.git' 'https://aur.archlinux.org/ncurses5-compat-libs.git' 'https://aur.archlinux.org/google-chrome.git' 'https://aur.archlinux.org/stm32pio.git') aur_clone(){ # Move to the dir you want the folder cd /home/me/myCode for repo in ${git_repo[@]} do # Get repo name name=$(echo "${url##*/}" | cut -f1 -d".") # Clone git clone $repo $name done } aur_clone
/home/me/myCode /home/me/myCode/stm32cubemx /home/me/myCode/ncurses5-compat-libs ...