Ответ 1
basename
удаляет префикс каталога пути:
$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
Я пытаюсь написать post-commit hook для SVN, который размещен на нашем сервере разработки. Моя цель - попытаться автоматически проверить копию завершенного проекта в каталог, где он размещен на сервере. Однако мне нужно иметь возможность читать только последний каталог в строке каталога, переданный в script, для проверки в тот же подкаталог, где размещаются наши проекты.
Например, если я делаю фиксацию SVN для "примера" проекта, мой script получает в качестве первого аргумента "/usr/local/svn/repos/example". Мне нужно получить только "пример" с конца строки, а затем привести его в соответствие с другой строкой, чтобы я мог проверить "/server/root/example" и немедленно увидеть изменения.
basename
удаляет префикс каталога пути:
$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
Bash может получить последнюю часть пути без вызова внешнего basename
:
subdir="/path/to/whatever/${1##*/}"
Для получения любого пути к пути можно использовать следующий подход:
pathname=a/b/c
echo $(basename $pathname)
echo $(basename $(dirname $pathname))
echo $(basename $(dirname $(dirname $pathname)))
Вывод:
c
b
a