Tiêm dòng vào lịch sử bash


9

Theo mặc định, bash tải các dòng từ ~/.bash_historylịch sử. Có thể thêm tập tin tùy chỉnh cũng được tải? Tôi muốn tiêm tệp chứa các lệnh tôi thường xuyên sử dụng và truy cập chúng thông qua tìm kiếm tích hợp.


2
Thông thường mọi người thêm bí danh cho các lệnh được sử dụng thường xuyên ...
HBruijn

Thật tuyệt. Nhưng đó không phải là trường hợp - Tôi sử dụng bí danh cho các lệnh tôi sử dụng liên tục nhưng tôi có rất nhiều lệnh có số lượng lớn đối số mà tôi muốn sửa đổi dựa trên hoàn cảnh.
rgtk

4
Bạn sẽ phải ghi lại một số loại sửa đổi tập tin, nghe có vẻ điên rồ và có thể không hoạt động. Chỉ cần biến các lệnh dài của bạn thành tập lệnh shell chấp nhận đối số và thả nó vào /usr/local/binhoặc một cái gì đó
Wesley

Nếu bạn sử dụng chúng thường xuyên, liệu chúng có trong lịch sử của bạn không?

Khai báo hàm trong .bashrc?
Mark K Cowan

Câu trả lời:


13

Tôi giữ cho nó đơn giản với một alias h='history|grep'tải vào hồ sơ Bash của tôi.

Vì vậy, quy trình làm việc của tôi là h command, ví dụ:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

Nếu tôi muốn chạy " hpssa -stop", tôi chỉ cần gõ!226


Đây chỉ là cách tiếp cận của tôi, nhưng có lẽ bạn có thể sửa đổi cách bạn nhớ lại các mục lịch sử. Tôi không nghĩ việc tiêm dữ liệu vào tệp lịch sử là điều hợp lý.


mẹo hay, ăn cắp cái đó
wim

Đề xuất bạn có thể muốn xem Ctrl-R làm gì để tìm kiếm lại trong lịch sử của mình. Chuẩn bị để tâm trí của bạn được thổi bùng ...

2
@CameronKerr Hãy xem câu trả lời ngay bên dưới câu hỏi này ( serverfault.com/a/695115/120438 ). Nhược điểm của việc sử dụng Ctrl + R trong trường hợp cụ thể này là nó cung cấp cho bạn các lệnh có liên quan một lúc, trong khi ewwhite Cách tiếp cận trả về một danh sách tất cả các lệnh có liên quan.
Jenny D

Mặc dù đây là một mẹo hay, nhưng nó không trả lời câu hỏi nào cả. Tôi không hiểu làm thế nào đây là câu trả lời được bình chọn cao nhất. Usecase của tôi là tôi có một hình ảnh docker mà tiếp tục mất lịch sử khi tôi thoát nó. Tôi nghĩ thật tuyệt nếu tôi có thể chuyển một tập tin lịch sử qua dòng lệnh tớidocker run ...
kumarharsh

@kumar_harsh Khó làm ơn.
ewwhite

7

Tôi đã từng rất phụ thuộc vào Ctrl-R( reverse-search-historylệnh Readline) tìm kiếm ngược trong lịch sử để truy xuất các lệnh dài đã nhập trước đó nhưng bây giờ tôi thích sử dụng bí danh và tập lệnh / hàm shell. Dù sao đi nữa, lệnh Bash historydựng sẵn có thể được sử dụng để tải danh sách các lệnh tùy chỉnh vào lịch sử hiện tại của bạn.

history -r [filename]

Từ trang bash man:

Đọc nội dung của tệp lịch sử và nối chúng vào danh sách lịch sử hiện tại.

Tự động khởi động

Tôi chỉ cố gắng tự động khởi chạy lệnh này bằng cách thêm nó vào dòng cuối cùng trong tôi .bashrc. Tuy nhiên, các lệnh từ tệp lịch sử tùy chỉnh của tôi không có sẵn khi tôi khởi động trình bao mới. Có vẻ như lịch sử shell chỉ được tải từ .bash_historytệp mặc định : sau khi các tệp khởi động đã được xử lý và ngay trước khi lời nhắc được trình bày cho trình vỏ tương tác. Thật không may, có vẻ như không có cách nào dễ dàng để tự động hóa việc này.


2

Như @AnthonyGeoghegan đã quan sát, lịch sử được tải sau khi các tệp khởi động được xử lý. Điều đó cung cấp một cách khác để tải trước lịch sử mong muốn trong tệp khởi động:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

Lưu ý rằng phương pháp này có thể dẫn đến nhiều bản sao của các lệnh đặc biệt của bạn được thêm vào .bash_history của bạn theo thời gian. Bạn có thể bọc các lệnh đặc biệt của mình bằng các dòng nhận xét, vì vậy bạn có thể dễ dàng tìm và xóa chúng (thông qua, ví dụ: sed) như là một phần của việc điền vào tệp .bash_history. Cái gì đó như:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
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.