Інший підхід - створити власну команду, присвячену для цієї мети. Це можна зробити за допомогою функції, яка може виглядати так:
$ 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
в цьому сценарії.