Một cách tiếp cận khác là tạo lệnh riêng của bạn dành riêng cho mục đích này. Điều này có thể được thực hiện thông qua chức năng có thể trông giống như:
$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
Trong đó: (1) mv-special
là tên hàm; (2) các biến $1
và $2
là đối số trong hàm, người sẽ được sử dụng bởi các lệnh mv
và cd
; (3) $(echo $2-)
thêm một ký tự mèo vào cuối chuỗi trong var $2
và sửa hành vi của dirname
nếu biến $2
chỉ chứa đường dẫn; (4) $(dirname $(echo $2-))
sẽ chỉ lọc đường dẫn từ $2
.
Theo câu trả lời này , chức năng có thể trông giống như:
$ function mv-special { mv $1 $2; cd ${2%/*}; }
Trong đó: ${2%/*}
sẽ chỉ lọc đường dẫn từ $2
.
Để có sẵn dưới dạng lệnh, chức năng này phải được xuất :
$ export -f mv-special
Sử dụng:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
hoặc là:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/
Vui lòng chú ý đến điều đó - đối với cả hai biến thể - đối số thứ hai ( $2
) phải kết thúc bằng tên tệp hoặc dấu gạch chéo (/
).
Để có sẵn lệnh mới của chúng tôi, định nghĩa của hàm và lệnh xuất phải được thêm vào ~/.bashrc
:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special
hoặc là:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special
Lệnh tùy chỉnh có thể được thực hiện và thông qua tệp tập lệnh thực thi được đặt trong ~/bin
hoặc trong /usr/sbin
: Làm cách nào tôi có thể tạo lệnh đầu cuối tùy chỉnh (để chạy tập lệnh)? Nhưng thành thật mà nói, tôi đã phải đối mặt với một rắc rối với hành vi cd
trong kịch bản này.