
На нашем сервере у нас есть несколько дублирующих структур папок для тестирования, подготовки и производства. За исключением незначительных изменений, структура папок у всех трех в целом одинакова.
Когда я работаю над плагином WordPress, я глубоко погружен в структуру папок разработки (например, ~/dev/com/wp-content/plugins/myplugin
). Я знаю, что она ~/staging/com/wp-content/plugins/myplugin
существует.
Если мой текущий рабочий каталог — ~/dev/com/wp-content/plugins/myplugin
, могу ли я как-то легко переключиться на~/staging/com/wp-content/plugins/myplugin
безвводить всю структуру каталогов?
Я хотел бы напечатать что-то вродеcdx
~/staging
, или дажеcdx
../../../../../staging
и пусть команда попытается пройти вниз по новому каталогу, используя мой текущий путь к каталогу. Очевидно, если новая папка не содержит правильной структуры, она выдаст ошибку.
Мне придется вводить всю структуру каталогов? Или есть способ получше?
решение1
Используйте замену строк в bash
:
$ a="~/dev/com/wp-content/plugins/myplugin"
$ echo ${a/dev/staging}
~/staging/com/wp-content/plugins/myplugin
Итак, функция типа:
cdx ()
{
cd "${PWD/$1/$2}"
}
И затем сделать, cdx dev staging
чтобы переключиться из папки в dev
в staging
. С некоторыми проверками, вы могли бы назвать функцию cd
:
cd ()
{
if [ $# != 2 ]
then
builtin cd "$@"
else
builtin cd "${PWD/$1/$2}"
fi
}
Эффект:
~ # cd /tmp
/tmp # cd tmp srv
/srv # cd
~ # cd -
/srv
/srv # cd tmp var
/srv #
Это сохраняет обычное поведение cd
во всех случаях, за исключением двух аргументов.
решение2
Добавьте эту функцию к своему файлу .bash_profile
, и, набрав ее, cdstaging
вы сможете переключаться между любым каталогом внутри него ~/dev
и его эквивалентом в ~/staging
.
Конечно, вы можете изменить имя на то, что вам нужно. Кроме того, вы можете создать обратную функцию, просто изменив имя функции и "1s@dev@staging@"
сделав ее прямо противоположной.
cdstaging ()
{
OLDPATH=$(pwd | sed -e "1s@$HOME@~@")
NEWPATH=$(echo $OLDPATH | sed -e "1s@dev@staging@")
cd $NEWPATH
}
решение3
В ksh
или zsh
:
cd dev staging