Как сопоставить строку / каталог в пути с помощью сценариев bash - PullRequest
0 голосов
/ 10 марта 2010

Я пытаюсь создать Makefile, который использует информацию из пути для создания соответствующего имени rpm. Предположим, у меня есть два возможных пути:

PATH1 = /usr/local/home/jsmith/code/main
PATH2 = /usr/local/home/jsmith/code/dev/ver2

Если в пути обнаружен «main», я хочу обнаружить и добавить «main» к имени rpm. Если в пути обнаружен «dev», я хочу обнаружить и добавить «ver2» к имени rpm.

Я новичок в сценариях оболочки и действительно не знаю, с чего начать. Я мог бы легко сделать это в Python, но для Makefile, поэтому мне нужно сделать это в оболочке.

«main» в пути будет константой, но если «main» не существует, имя пути dev нужно будет извлечь. Вот несколько примеров:

/ USR / местные / дома / JSmith / код / ​​главная / USR / местные / дома / JSmith / код / ​​DEV / ver_usa / USR / местные / дома / JSmith / код / ​​DEV / ver_mexico / USR / местные / дома / JSmith / код / ​​DEV / ver3

Если бы существовал «dev», то было бы необходимо извлечь «ver_usa», «ver_mexico», «ver3» и т. Д. Имя dir, которое нужно извлечь, будет точно следовать за «dev».

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

как-то так, при условии, что "main" и "ver2" не являются постоянными

some_rpm_name="some rpm"
PATH=/usr/local/home/jsmith/code/main
#PATH2=/usr/local/home/jsmith/code/dev/ver2
s=${PATH##*/}
case "$s" in
  *main ) RPM_NAME="${some_rpm_name}_main";;
  *ver2) RPM_NAME="${some_rpm_name}_ver2";;
esac
echo $RPM_NAME
0 голосов
/ 10 марта 2010

Похоже, что последний элемент пути всегда тот, который вам нужен.

rpmname=$rpmname+${pathname##*/}

или

rpmname=$rpmname+$(basename pathname)
0 голосов
/ 10 марта 2010

Использовать grep и проверять возвращаемое значение?

Кроме того, вы можете запускать python в Makefile.

...