Lưu lệnh vào lịch sử mà không thực hiện trong bash


8

Có cách nào để lưu một lệnh trong lịch sử bash mà không thực hiện nó không? ví dụ

$ cmd [a long list of arguments] 

và bây giờ trong khi gõ tôi nhớ tôi muốn làm một cái gì đó khác trước. Tôi có thể có một cái gì đó như

$ cmd [a long list of arguments][some-key-strokes]

và điều này không thực sự thực thi mà đi vào lịch sử bash để tôi có thể sử dụng nó sau này?


5
Trong tình huống đó, tôi chỉ cần thêm tiền tố vào dòng #và sau đó nhấn Enter.
Oliver Charlesworth

Câu trả lời:


5

Có thể có một cách tốt hơn, nhưng bạn có thể sử dụng công cụ :psửa đổi mở rộng lịch sử để in dòng bình luận hiện tại mà không cần thực thi. !#là dòng hiện tại và %tự nó sẽ không có gì phù hợp

$ cmd [arguments] !#%:p

mát mẻ! ;) và không cần thoát ký tự đặc biệt trong lệnh, điều gì có thể trở nên lộn xộn nếu lệnh không chỉ là ls -al+1

mát mẻ! rất gọn gàng

8

Sử dụng -stùy chọn cho historylệnh:

history -s cmd arg1 arg2

Cuộc gọi đến history -schính nó, một cách thuận tiện, không được thêm vào lịch sử lệnh, vì vậy trong lịch sử của bạn, nó xuất hiện như thể bạn thực hiện cmdmà không thực sự làm như vậy.


mát mẻ! điều này cũng tuyệt vời

1

Thông thường điều này được thực hiện bởi

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

Lưu ý rằng tên của lịch sử có thể khác nhau trên hệ thống của bạn. Do đó bạn có thể sử dụng HISTFILEvar môi trường

những gì làm cho:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"

1

Thông thường tôi chỉ cần thêm một # vào đầu dòng để chuyển đổi dòng thành một nhận xét:

#cmd [a long list of arguments] 

Tôi thích cách này vì bạn có thể làm điều đó chỉ với 3 [4 nếu bạn cần SHIFT để chèn phím #]

^a#<ENTER>

^ a đi đến đầu dòng hiện tại

# thêm nhận xét

ENTER thực hiện bình luận


0

Trong tình huống đó, tôi chỉ cần thêm tiền tố vào dòng với #, rồi nhấn Enter.

... hoặc sử dụng tổ hợp phím: ESC #

bind -p | grep -i 'insert-comment'   # "\e#": insert-comment

Xem thêm: Bash - lưu lệnh mà không thực hiện nó


0

Bạn có thể thử thêm một khoảng trắng và | (ống) ở cuối dòng, nhấn enter và sau đó Ctrl-C'ing.

( Space, |, Enter, Ctrl+ C)

Lệnh sẽ có trong lịch sử của bạn với một | ở cuối (có thể chỉ cần xóa bằng backspace) thay vì # ở đầu (có khả năng tẻ nhạt hơn để xóa).

TUYÊN BỐ TỪ CHỐI: Tôi không biết nếu điều này luôn hoạt động! Sử dụng có nguy cơ của riêng bạn!

$ cmd [danh sách đối số dài] |

> Ctrl+C

$ Up

$ cmd [danh sách đối số dài] |


0

Bạn có thể thử sử dụng dòng này:

history -s -p $COMMAND

Từ help:

The -p option means to perform
history expansion on each ARG and display the result,

Điều này có nghĩa là bạn có thể mở rộng những thứ như !!và lưu trữ kết quả ở dưới cùng của lịch sử.


history -sđã được đưa ra trong một câu trả lời hai năm trước. Liệu sự -pcải thiện về điều đó? Không gì -plàm gì? (Trong phạm vi mà nó làm cho tinh thần để làm như vậy, bạn nên chỉnh sửa câu trả lời của bạn để làm cho nó tốt hơn, và không đáp ứng với nhận xét của tôi với bình luận khác.)
G-Man

0

Một tùy chọn khác là đi đến đầu dòng và thực hiện việc bạn sẽ làm theo sau &&, như

rm old_file && cmd [args]

Vì vậy, nếu điều bạn muốn làm thành công, lệnh của bạn sẽ chạy ngay lập tức sau đó và nếu thất bại, lệnh của bạn sẽ không chạy, nhưng nó sẽ có trong lịch sử. Bạn cũng có thể làm

test && cmd [args]

Vì thử nghiệm không có đối số sẽ thất bại, nhưng đây là một số tổ hợp phím bổ sung so với #phương pháp.


0

Tôi nghĩ rằng "một số nét chính" mà bạn muốn là Ctrl-U và Ctr-Y, nơi lưu trữ một dòng vào vòng giết, và sau đó kéo nó ra sau. Nó không đi vào lịch sử, nhưng sau đó tôi nghĩ là không nên, vì bạn đã không làm điều đó.

Lệnh giết chết

Giết chóc và đánh đòn

Tôi đã học được cách đây nhiều năm, sau đó quên và đi tìm những nét chính đó.

Nó cũng được thảo luận ở đây: https://unix.stackexchange.com/questions/140741/how-to-save-a-command-you-entered-without-executing-it

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.