Ein weiterer Ansatz besteht darin, einen eigenen Befehl für diesen Zweck zu erstellen. Dies kann über eine Funktion erfolgen, die wie folgt aussehen könnte:
$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
Wobei: (1) mv-special
der Funktionsname ist; (2) die Variablen $1
und $2
sind Argumente in der Funktion, die von den Befehlen mv
und verwendet werden cd
; (3) $(echo $2-)
Fügt am Ende der Zeichenfolge in var ein Wildcat-Zeichen hinzu $2
und korrigiert das Verhalten, dirname
wenn die Variable $2
nur path enthält. (4) $(dirname $(echo $2-))
filtert nur den Pfad von $2
.
Nach dieser Antwort könnte die Funktion so aussehen:
$ function mv-special { mv $1 $2; cd ${2%/*}; }
Wo: ${2%/*}
filtert nur den Pfad von $2
.
Um als Befehl verfügbar zu sein, muss diese Funktion vorhanden sein exportiert werden :
$ export -f mv-special
Verwendung:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
oder:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/
Bitte beachten Sie, dass für beide Varianten das zweite Argument ($2
) mit Dateiname oder Schrägstrich ( /
) enden muss .
Damit unser neuer Befehl dauerhaft verfügbar ist, müssen die Definition der Funktion und der Exportbefehl an Folgendes angehängt werden ~/.bashrc
:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special
oder:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special
Ein benutzerdefinierter Befehl kann über eine ausführbare Skriptdatei erstellt werden, die sich in ~/bin
oder in befindet /usr/sbin
: Wie kann ich einen benutzerdefinierten Terminalbefehl erstellen (um ein Skript auszuführen)? Aber um ehrlich zu sein, hatte ich Probleme mit dem Verhalten cd
in diesem Szenario.