Я пытаюсь написать хук после фиксации для SVN, который размещен на нашем сервере разработки. Моя цель - попытаться автоматически извлечь копию зафиксированного проекта в каталог, где он размещен на сервере. Однако мне нужно иметь возможность читать только последний каталог в строке каталога, переданной сценарию, чтобы оформить заказ в том же подкаталоге, где размещены наши проекты.
Например, если я сделаю SVN-коммит в проекте «example», мой скрипт получит «/ usr / local / svn / repos / example» в качестве первого аргумента. Мне нужно получить только «пример» из конца строки, а затем объединить его с другой строкой, чтобы я мог оформить заказ в «/ server / root / example» и сразу же увидеть изменения.
SUBDIR="/path/to/whatever/$(basename $1)"
$1
, или$1
пустоСледующий подход может быть использован для получения любого пути имени пути:
Вывод:
источник
echo "$(basename "$(dirname "$pathname")")"
Bash может получить последнюю часть пути без вызова внешнего
basename
:источник
d=/home/me/somefolder;subdir="/$d/${1##*/}"
В итоге я получил что-то вроде//home/me/somefolder//
$ d на самом деле из циклаfor d in $(find $SOMEFOLDER -maxdepth 1 -type d);
Использованиеsubdir=$(basename $d)
работ, как и ожидалось.while
вместо того,for
чтобы перебирать выходные данныеfind
(find -print0 | xargs -0
лучше) или использовать globbing:for d in $SOMEFOLDER/*/
(последний слеш работает как-type d
- вы можете использовать**
в Bash 4 для рекурсии, если выshopt -s globstar
, но сообщение «Список аргументов слишком длинный» возможно). Обратите внимание, что${1}
часть команды представляет первый аргумент скрипта или функции. Вам может понадобиться использовать${d##*/}
или другую переменную или спецификацию аргумента или убедиться, что аргумент передается в$1
$1
содержитthe path from which last component is to be taken out
. Я пропустил эту часть. Мой вариант использования:target_path='/home/user/dir1/dir2/dir3/'; target_path="${target_path%/}"; last_component=${target_path##*/}; echo $last_component
- Работает 😉${1##*/}
работает: unix.stackexchange.com/a/171786/15070