Генерировать путь, чтобы вернуться назад на заданный путь
Предполагая, что у меня есть следующий относительный путь:
MY_PATH := first/second/third
Я ищу предпочтительно короткую команду оболочки для достижения следующего:
MY_NEW_PATH := ../../..
Как это сделать?
1 ответ
Решение
$ MY_PATH=first/second/third
$ sed -e 's#[^/]\+/\?#../#g' <<<"$MY_PATH"
../../../
Самый простой способ получить этот путь без косой черты - это просто удалить его.
$ MY_PATH=first/second/third
$ cdup=$(sed -e 's#[^/]\+/\?#../#g' <<<"$MY_PATH")
$ echo "$cdup"
../../../
$ echo "${cdup%/}"
../../..
Вы также можете использовать что-то вроде этого (которое генерирует более уродливый, но все же действительный путь):
$ MY_PATH=first/second/third
$ sed -e 's#[^/]\+/\?#./.#g' <<<"$MY_PATH"
./../../.
Возможно, есть лучшая альтернатива, чтобы получить путь без косой черты, но мне придется больше об этом думать.