Thực hiện lại lệnh fc từ lịch sử


7

Đôi khi tôi đang sử dụng fcnội dung trong bash(3.2 nếu có vấn đề), để gọi lại các lệnh từ lịch sử. Điều này cũng cung cấp khả năng chỉnh sửa, trước khi thực hiện.

Ví dụ: bằng cách gõ

fc 23 27

Tôi có thể thực hiện lại lệnh 23 đến 27. Nhưng bây giờ tôi muốn thực hiện lại fc 23 27lệnh cụ thể này . Tôi nên làm thế nào? Có vẻ như thực thi fckhông được lưu trữ trong lịch sử lệnh, mặc dù các dòng mới được thực hiện là.


1
Nghe nói lần đầu tiên lệnh này fc. Cảm ơn đã khai sáng :)
SHW

Câu trả lời:


5

Thêm phần này vào .bashrc của bạn:

fc() {
    command fc "$@"
    history -s fc $@
}

Đẹp, công trình này. Sẽ gọn gàng nếu có một giải pháp tích hợp thay vì chức năng. Tôi sẽ thưởng cho bạn tiền thưởng trong trường hợp không có câu trả lời tốt hơn.
Bernhard

0

hãy thử thêm fc 23 27lịch sử của bạn và khôi phục lại sau:

knoedel@section60:~> bash --version
GNU bash, version 4.2.42(1)-release (x86_64-suse-linux-gnu)

knoedel@section60:~> history -s "fc 4074 4076"
knoedel@section60:~> history | tail -n 2
 4090  15/12/2013 11:31:23 > fc 4074 4076
 4091  15/12/2013 11:31:25 > history | tail
knoedel@section60:~> fc -s 4090

Vì vậy, fc -s 4090thực sự chạy fc 4074 4076nhưng chỉ trong phiên này. Nếu bạn đăng xuất và đăng nhập lại, số lệnh lịch sử sẽ thay đổi. Ít nhất là như tôi đã thử nó. (có lẽ khi đạt BASH_HISTSIZE)

Để tránh chạy sai lệnh, tôi khuyên bạn nên lưu các lệnh từ lịch sử vào tập lệnh shell với fc -n -l id id > ~/bin/something.sh


Cảm ơn câu trả lời của bạn. Chỉ, tôi không hiểu nó khác với cái nào bởi @Baronsed?
Bernhard

Bạn đã yêu cầu một giải pháp với các công cụ tích hợp - đó là gợi ý của tôi. Tôi đã không thực sự hiểu lý do tại sao bạn yêu cầu một giải pháp như vậy ngay từ đầu. Baronsed đã trả lời câu hỏi của bạn và bạn có thể sử dụng cùng một giải pháp mà không cần tập lệnh bash đó. Tôi chỉ cần thêm một chút văn bản để giải thích nó, ok?
StefanKaerst

Tôi đã hy vọng cho một giải pháp như: fc --keepinhistory 22 34hoặc export HISTNOTIGNORE=fc. Nhưng, dường như điều đó không tồn tại.
Bernhard

nếu bạn muốn sử dụng các lệnh cũ để vô hiệu hóa lịch sử bash. stackoverflow.com/questions/18663078/disable-history-in-linux nếu không các lệnh mới được thêm vào lịch sử (ngoại trừ fc không phải là lệnh mới nhưng chạy lại lệnh cũ - chạy lại lệnh cuối cùng là như vậy .. nó không nhận được được thêm vào lịch sử) hth
StefanKaerst 17/12/13

Tôi không chắc tôi có hiểu bạn đang nói gì không, nhưng tôi không muốn vô hiệu hóa lịch sử. Tôi chỉ muốn fclệnh mà tôi gõ được thêm vào lịch sử.
Bernhard
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.