
Вот что я пытаюсь сделать: у меня есть папка для репозиториев кода, и я ищу команду bash, которая может указать "корневой каталог кода" текущего рабочего каталога. Например, если я сейчас в ~/repositories/my_program/folder1/folder2/
, я хочу, чтобы команда возвращала ~/repositories/my_program/
.
Я могу получить рабочий путь к каталогу с помощью pwd
и список проектов с помощью ls ~/repositories/
. Как определить, какая из ~/repositories/<match>
строк является префиксом pwd
?
решение1
Если вам просто нужен каталог прямо под ~/repositories
, вы можете сделать что-то вроде
$ sed -r "s#($HOME/repositories/[^/]*).*#\1#" <<<$PWD
/home/terdon/repositories/my_program
И только для печати my_program
:
$ sed -r "s#$HOME/repositories/([^/]*).*#\1#" <<<$PWD
my_program
Чтобы использовать ~/
вместо этого, попробуйте
$ sed -r "s#$HOME(/repositories/[^/]*).*#~\1#" <<<$PWD
~/repositories/my_program
Идея состоит в том, чтобы сопоставить $HOME/repositories/
, а затем еще один каталог (определяемый как самая длинная строка не- /
символов: [^/]*
).