Другой подход - создать собственную команду, предназначенную для этой цели. Это можно сделать с помощью функции, которая может выглядеть следующим образом:
$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
Где: (1) mv-special
- имя функции; (2) переменные $1
и $2
аргументы в функции, которые будут использоваться командами mv
и cd
; (3) $(echo $2-)
добавляет символ wildcat в конец строки в var $2
и исправляет поведение, dirname
если переменная $2
содержит только путь; (4) $(dirname $(echo $2-))
будет фильтровать только путь от $2
.
Согласно этому ответу функция может выглядеть так:
$ function mv-special { mv $1 $2; cd ${2%/*}; }
Где: ${2%/*}
будет фильтровать только путь от $2
.
Чтобы быть доступной как команда, эта функция должна быть экспортирована :
$ export -f mv-special
Использование:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
или:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/
Обратите внимание, что для обоих вариантов второй аргумент ( $2
) должен заканчиваться именем файла или косой чертой ( /
).
Чтобы наша новая команда была постоянно доступна, к ней должны быть добавлены определение функции и команда экспорта ~/.bashrc
:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special
или:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special
Пользовательская команда может быть сделана и через исполняемый файл скрипта, который находится внутри ~/bin
или внутри /usr/sbin
: Как я могу создать пользовательскую команду терминала (для запуска скрипта)? Но, если честно, я столкнулся с проблемой поведения cd
в этом сценарии.