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 $1und $2sind Argumente in der Funktion, die von den Befehlen mvund verwendet werden cd; (3) $(echo $2-) Fügt am Ende der Zeichenfolge in var ein Wildcat-Zeichen hinzu $2und korrigiert das Verhalten, dirnamewenn die Variable $2nur 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 ~/binoder 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 cdin diesem Szenario.