Innym podejściem jest utworzenie własnego polecenia przeznaczonego do tego celu. Można to zrobić za pomocą funkcji, która może wyglądać następująco:
$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
Gdzie: (1) mv-special jest nazwą funkcji; (2) zmienne $1i $2argumenty w funkcji, które będą używane przez komendy mvi cd; (3) $(echo $2-) dodaje znak wildcat na końcu łańcucha w var $2i naprawia zachowanie, dirnamejeśli zmienna $2zawiera tylko ścieżkę; (4) $(dirname $(echo $2-)) odfiltruje tylko ścieżkę $2.
Zgodnie z tą odpowiedzią funkcja może wyglądać następująco:
$ function mv-special { mv $1 $2; cd ${2%/*}; }
Gdzie: ${2%/*}odfiltruje tylko ścieżkę $2.
Aby funkcja ta była dostępna jako polecenie, należy ją wyeksportować :
$ export -f mv-special
Stosowanie:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
lub:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/
Proszę zwrócić uwagę, że - dla obu wariantów - drugi argument ( $2) musi kończyć się nazwą pliku lub ukośnikiem ( /).
Aby nasze nowe polecenie było stale dostępne, do funkcji należy dołączyć definicję funkcji i polecenie eksportu ~/.bashrc:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special
lub:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special

Niestandardowe polecenie można wykonać za pomocą wykonywalnego pliku skryptu, który jest umieszczony w ~/binlub w /usr/sbin: Jak mogę utworzyć niestandardowe polecenie terminala (w celu uruchomienia skryptu)? Ale szczerze mówiąc, miałem problem z zachowaniem się cdw tym scenariuszu.