bash, эквивалентный модификаторам tcsh для извлечения компонентов пути - PullRequest
0 голосов
/ 08 февраля 2019

В tcsh я могу извлечь второй элемент пути из конца пути следующим образом

cd /some/long/directory/structure/path/
set x=`pwd`
echo ${x:h:h:t}
directory

Как я могу сделать то же самое в bash?

Я имею в виду, имеет ли bash такжеэтот вид модификаторов?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Модификаторы стиля csh можно использовать с расширением истории (неудивительно, что расширение истории было заимствовано из csh).

$ cd /some/long/directory/structure/path/
$ echo !!:1:h:h:t
echo directory
directory

!!:1 выбирает слово 1 (считая с нуля)предыдущей команды, поэтому аргумент cd.

(echo directory появляется при стандартной ошибке, поскольку оболочка по умолчанию отображает результат расширения истории до фактического выполнения результирующей команды.)

0 голосов
/ 08 февраля 2019

В неинтерактивном bash-скрипте команды расширения истории, как в ответе @ chepner, обычно не будут доступны.Тем не менее, у вас есть расширения параметров, такие как:

$ cd /some/long//directory///structure/path/
$ set x=$(pwd)
$ echo $x
/some/long/directory/structure/path
$ y=${y%/*/*}      # each /* is equivalent to one :h
$ y=${y##*/}       # equivalent to :t
$ echo $y
directory
0 голосов
/ 08 февраля 2019
cd /some/long/path/somewhere
x=$PWD
basename "$(dirname "$x")"
>  path

dirname получает абсолютный путь к родительской папке аргумента.basename получает имя аргумента.

Edit: запомнился гораздо лучше, чем я делал раньше.

...