Làm thế nào để truy cập vào lịch sử một cách nhanh chóng trong Unix?


12

Ví dụ, nếu tôi làm một

mkdir thisismyfolder912

Tôi nhớ có một số cách dễ dàng để chuyển sang thisismyfolder912hơn là phải làm một

cd thisismyfolder912

Cách đó là gì và nó hoạt động như thế nào? Ngoài ra, những cách khác tôi có thể sử dụng này là gì?


1
Sử dụng hoàn thành TAB cho các lệnh và thư mục không có trong danh sách lịch sử gần đây của bạn. cd this<TAB>
đảo ngược

Câu trả lời:


10

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.



Tôi đang tìm kiếm 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ì ...
Lazer

2
@Lazer !$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
Michael Mrozek

9

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.


4
ÁI CHÀ! Điều này thực sự sẽ thay đổi cuộc sống của tôi. Bắt vít bạn history | grep ...!
Oli

Đây không chỉ liên quan đến SuSE, tôi nghĩ đó là một tính năng của Bash :)
sakisk 17/03/2016

Tôi chỉ đọc về việc sử dụng 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
Banjer


2

điều này luôn làm việc cho tôi:

mkdir thisismyfolder
cd $_

Mặc dù vậy, hãy cẩn thận với điều này: $!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.
JMB

1

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.


1

Nếu bạn sử dụng bash tôi đề nghị pushdpopd. 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:~$

Nếu bạn sử dụng một dấu nhắc viết tắt, nó làm cho bài viết dễ đọc hơn. (Tôi đang đề cập đến việc xóa người dùng và tên máy chủ. Tôi hiểu rằng việc hiển thị PWD thay vì chỉ $hữu ích khi trình diễn pushd, v.v.)
Tạm dừng cho đến khi có thông báo mới.

1

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 foolệ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


1

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?

Từ tài liệu GNU Readline :

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.