Câu trả lời:
Bạn đang nói về mở rộng lịch sử cổ điển, hoặc xử lý Readline? cd !$
trên dòng đầu vào tiếp theo sẽ thay thế trong đối số cuối cùng của dòng trước đó, M-.hoặc M-_sẽ đánh dấu nó bằng cách sử dụng Readline.
cd !$
. "Mở rộng lịch sử cổ điển hoặc xử lý Readline" Tôi không hiểu chính xác ý bạn là gì ...
!$
là một bản mở rộng lịch sử ; Shell xử lý nó khi nó phân tích cú pháp lệnh của bạn. M-. là một tổ hợp phím đọc; readline là thư viện xử lý từng phím bạn nhấn và nó thấy rằng bạn đã nhấn M-. và tự động nhập vào đối số cuối cùng của lệnh cuối cùng cho bạn
Nếu câu hỏi của bạn là về việc truy cập lịch sử lệnh, thì hãy thử lệnh có tên tốt này
history
Bạn cũng có thể thử Ctrl+ rvà bắt đầu nhập một lệnh bạn đang cố nhớ rằng bạn đã gõ gần đây.
(reverse-i-search)`cd ': cd mydir/data/
Nhấn ESCđể chọn lệnh hoặc thoát. Điều này làm việc cho tôi trên SuSE ít nhất; không chắc chắn về các distro khác.
history | grep ...
!
vi
để quản lý dòng lệnh của bạn. Trông cực ngầu. sử dụng vi để chỉnh sửa các lệnh shell
Nó đơn giản như Alt+.
$ mkdir lasdfjalsdkjf
$ cd
Alt + .
$ cd lasdfjalsdkjf
<kbd></kbd>
thẻ để bao quanh phím.
<kbd>
điều này luôn làm việc cho tôi:
mkdir thisismyfolder
cd $_
$!
mở rộng đến từ cuối cùng bạn thực sự gõ, $_
mở rộng đến từ cuối cùng sau khi mở rộng - vì vậy bạn có thể echo /tmp/tmpfile*
và thấy một loạt các tệp bạn muốn xóa, nhưng sau đó rm $_
sẽ chỉ xóa một trong số chúng.
Chọn một mẹo từ một chủ đề khác, nếu bạn đặt:
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
trong .bashrc của bạn sau đó, bạn có thể bắt đầu nhập nội dung nào đó từ lịch sử của mình và sau đó nhấn mũi tên lên, sau đó thay vì đi qua mục lịch sử của mình theo mục, nó sẽ bỏ qua ngay các mục trước đó bắt đầu với những gì bạn đã bắt đầu đánh máy
Tôi đoán điều này không giúp được gì nhiều với ví dụ cụ thể được đưa ra trong câu hỏi, nhưng đó là một điều giúp tôi truy cập lịch sử một cách nhanh chóng.
Nếu bạn sử dụng bash tôi đề nghị pushd
và popd
. Bạn có thể tạo một chồng thư mục và duyệt nó nhanh chóng. Xem ví dụ này:
PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$
$
hữu ích khi trình diễn pushd
, v.v.)
Trên một lưu ý liên quan, tôi khuyên bạn nên sử dụng histverify trong bash. Đặt cái này trong ~ / .bashrc:
shopt -s histverify
Điều này sẽ khiến bash in ra lệnh sau khi mở rộng! $ Hoặc các hàm lịch sử khác và cho bạn cơ hội xem xét nó trước khi nhấn enter lần nữa để thực sự chạy nó. Đối với tôi, kiểm tra độ tỉnh táo là giá trị bấm phím đôi khi. Muốn chắc chắn rằng tôi đang chạy cd foo
lệnh chứ không phải rm -rf foo
...
Tôi thường xuyên sử dụng Ctrl-Rcách tiếp cận, cũng như Alt-.(phù hợp với kịch bản bạn mô tả). Tôi sẽ sử dụng! $ Nhân dịp.
Đây là những kỹ thuật mục đích chung rất hữu ích.
Nhưng để giải quyết câu hỏi cụ thể của bạn:
Tạo một thư mục và cd'ing trực tiếp vào nó là một sự kết hợp phổ biến đến mức có ích để có một chức năng để bọc nó ..
function mcd {
local newdir='_mcd_command_failed_'
if [ -d "$1" ]; then # Dir exists, mention that
echo "$1 exists..."
newdir="$1"
else
if [ -n "$2" ]; then # We've specified a mode
command mkdir -p -m $2 "$1" && newdir = "$1"
else # Plain old mkdir
command mkdir -p "$1" && newdir="$1"
fi
fi
builtin cd "$newdir" # No matter what, cd into it
}
Sử dụng: mcd thisismyfolder
Nếu shell của bạn sử dụng readline (trường hợp này bash
), bạn có thể làm gì đó như nhấn ATL+ .cùng nhau không?
yank-last-arg (M-. hoặc M-_)
Chèn đối số cuối cùng vào lệnh trước đó (từ cuối cùng của mục lịch sử trước đó). Với một đối số, hành xử chính xác như yank-nth-arg. Các cuộc gọi liên tiếp đến yank-last-arg di chuyển trở lại qua danh sách lịch sử, lần lượt chèn đối số cuối cùng của mỗi dòng.
cd this<TAB>