Bash: в каталоге `directory_name.git`, как перейти к` ../ directory_name`? - PullRequest
0 голосов
/ 06 января 2011

Я довольно новичок в скриптах Bash и собираюсь сделать следующее:

pwd скрипта - "/a/b/c/directory_name.git/", и я хотел бы перейти к "../directory_name", где directory_name может быть любым Есть ли простой способ сделать это?

Полагаю, мне нужно было бы поместить результат pwd в переменную и стереть последние 4 символа.

Ответы [ 5 ]

1 голос
/ 06 января 2011

Это должно работать:

cd "${PWD%.*}"
1 голос
/ 06 января 2011
tmpd=${PWD##*/}
cd ../${tmpd%.*}

или, возможно, более просто

cd ${PWD%.*}

Test

$ myPWD="/a/b/c/directory_name.git"
$ tmpd=${myPWD##*/}
$ echo "cd ../${tmpd%.*}"
cd ../directory_name

* Примечание: $ PWD не включает в себя косую черту, поэтому ${param##word} расширение будет работать нормально.

1 голос
/ 06 января 2011

Try:

cd `pwd | sed -e s/\.git$//`

Обратные метки выполняют команду внутри и используют вывод команды that в качестве аргумента командной строки для cd.

Для отладки конвейеров, подобных этой, полезно использовать echo:

echo `pwd | sed -e s/\.git$//`
0 голосов
/ 06 января 2011

Не ожидал получить так много ответов так быстро, что у меня было время придумать свое собственное не элегантное решение:

#!/bin/bash

PWD=`pwd`
LEN=${#PWD}
END_POSITION=LEN-4
WORKING_COPY=${PWD:0:END_POSITION}

echo $WORKING_COPY
cd $WORKING_COPY

Наверное, есть еще один, более элегантный:)

0 голосов
/ 06 января 2011

Вот для чего basename:

cd ../$(basename "$(pwd)" .git)
...