
Auf unserem Server haben wir mehrere doppelte Ordnerstrukturen für Tests, Staging und Produktion. Abgesehen von geringfügigen Änderungen ist die Ordnerstruktur bei allen drei im Allgemeinen gleich.
Wenn ich an einem WordPress-Plugin arbeite, befinde ich mich tief in der Entwicklungsordnerstruktur (z. B. ~/dev/com/wp-content/plugins/myplugin
). Ich weiß, dass es das ~/staging/com/wp-content/plugins/myplugin
gibt.
Wenn mein aktuelles Arbeitsverzeichnis ist ~/dev/com/wp-content/plugins/myplugin
, kann ich dann irgendwie einfach zu wechseln~/staging/com/wp-content/plugins/myplugin
ohnedie gesamte Verzeichnisstruktur eintippen?
Ich würde gerne etwas schreiben wiecdx
~/staging
, oder auchcdx
../../../../../staging
und lassen Sie den Befehl versuchen, das neue Verzeichnis unter Verwendung meines aktuellen Verzeichnispfads zu durchsuchen. Wenn der neue Ordner nicht die richtige Struktur aufweist, tritt natürlich ein Fehler auf.
Muss ich die gesamte Verzeichnisstruktur eintippen? Oder gibt es einen besseren Weg?
Antwort1
Verwenden Sie die Zeichenfolgenersetzung in bash
:
$ a="~/dev/com/wp-content/plugins/myplugin"
$ echo ${a/dev/staging}
~/staging/com/wp-content/plugins/myplugin
Also eine Funktion wie:
cdx ()
{
cd "${PWD/$1/$2}"
}
Und dann cdx dev staging
wechseln Sie von einem Ordner in dev
zu staging
. Mit ein paar Überprüfungen können Sie die Funktion benennen cd
:
cd ()
{
if [ $# != 2 ]
then
builtin cd "$@"
else
builtin cd "${PWD/$1/$2}"
fi
}
Wirkung:
~ # cd /tmp
/tmp # cd tmp srv
/srv # cd
~ # cd -
/srv
/srv # cd tmp var
/srv #
Dadurch wird das übliche Verhalten cd
in allen Fällen beibehalten, mit Ausnahme von zwei Argumenten.
Antwort2
Fügen Sie diese Funktion zu Ihrer hinzu .bash_profile
, und durch Eingabe cdstaging
können Sie zwischen jedem Verzeichnis darin ~/dev
und dem entsprechenden Verzeichnis wechseln ~/staging
.
Natürlich können Sie den Namen beliebig ändern. Darüber hinaus können Sie eine umgekehrte Funktion erstellen, indem Sie einfach den Funktionsnamen "1s@dev@staging@"
in das Gegenteil ändern.
cdstaging ()
{
OLDPATH=$(pwd | sed -e "1s@$HOME@~@")
NEWPATH=$(echo $OLDPATH | sed -e "1s@dev@staging@")
cd $NEWPATH
}
Antwort3
In ksh
oder zsh
:
cd dev staging