Как вырезать строку и отправить ее в команду 'cd' - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь написать небольшой скрипт оболочки, который поможет обновить пакеты из AUR на моем ArchLinux.Больше практиковаться в написании сценариев оболочки, чем что-либо еще.Я отправляю ему ссылку на git-репозиторий в качестве аргумента, и позже ему нужно получить имя папки, которое зависит от ссылки на git.

echo "$1" | sed 's/.*\///' | sed 's/\.git//'

Если моя ссылка на git https://aur.archlinux.org/example.git, она напишет exampleдо терминала.Это ожидается.Но если я сделаю

cd "$1" | sed 's/.*\///' | sed 's/\.git//'

, он попытается перейти в каталог, который назван так же, как ссылка.Как мне это исправить?

1 Ответ

0 голосов
/ 11 июня 2018

Ваша команда cd не выполняется, поскольку, как вы ее написали, ввод, обрабатываемый sed, является выводом самой команды cd, а не текстом переменной $1.

Но вам не нужно sed, чтобы вырезать части строки, вы можете сделать это только с помощью расширения параметров:

$ link='https://aur.archlinux.org/example.git'
$ echo "$(link="${link##*/}"; printf '%s' "${link%.git}")"
example

Однако, если вы пытаетесь cdв каталог example в вашем сценарии может работать следующее с использованием массива BASH_REMATCH:

#!/usr/bin/env bash

link="$1"

if [[ $link =~ ^https?://.*/([^.]+).git$ ]]; then
  cd "${BASH_REMATCH[1]}"
else
  printf 'Invalid link: %s\n' "$link"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...