[mikeserv@localhost ~]$ PS1=$PS1'$(
[ ${last_hist=\!} -ne \! ] && {
h=$(history 1)
[ -n "${h#"${h##* cd *}"}" ] &&
. ./.dircmd >&2 2>/dev/null
})${0##*["$0"$((last_hist=\!))]*}'
[mikeserv@localhost ~]$ cd .
[mikeserv@localhost ~]$
[mikeserv@localhost ~]$ echo
[mikeserv@localhost ~]$ cat <<\DIRCMD >.dircmd
echo this is my home directory
> DIRCMD
[mikeserv@localhost ~]$
[mikeserv@localhost ~]$ echo
[mikeserv@localhost ~]$ cd .
this is my home directory
[mikeserv@localhost ~]$
Một cái gì đó như thế sẽ hoạt động cho một hệ thống POSIX - mặc dù tôi nghĩ chỉ bash
yêu cầu \ dấu gạch chéo ngược trước! Bang như thế. bash
dường như cũng cập nhật lịch sử theo cách không hoạt động fc
- có thể mang theo - nhưng không hoạt động history
. Trong các shell khác, history 1
bit nên được trao đổi với fc -l -1
nhưng bash
nó là một lệnh phía sau, tôi đoán vậy. Đó là khá bực bội.
Dù sao, mỗi khi rút ra dấu nhắc, nó xác định biến $last_hist
là số lịch sử cho lệnh cuối cùng. Nó thực hiện điều này trong trường khớp trên một thay thế tham số sẽ luôn luôn không có gì để không hiển thị trong lời nhắc.
Các fc
kiểm tra chỉ làm cho chắc chắn rằng số lịch sử cuối cùng thực sự tăng lên - như trong, bạn không chỉ nhấn Enter hoặc bất cứ điều gì. Nó cũng kiểm tra lệnh cuối cùng là a cd
. Nếu cả hai đều đúng, nó sẽ cố gắng tìm .
một tệp trong thư mục hiện tại có tên .dircmd
. Nếu nó tồn tại, nó chạy. Nếu không, oh tốt.
Ruby