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 $1
i $2
argumenty w funkcji, które będą używane przez komendy mv
i cd
; (3) $(echo $2-)
dodaje znak wildcat na końcu łańcucha w var $2
i naprawia zachowanie, dirname
jeśli zmienna $2
zawiera 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 ~/bin
lub w /usr/sbin
: Jak mogę utworzyć niestandardowe polecenie terminala (w celu uruchomienia skryptu)? Ale szczerze mówiąc, miałem problem z zachowaniem się cd
w tym scenariuszu.