Zapisz polecenie w historii bez wykonywania w bash

8

Czy istnieje sposób na zapisanie polecenia w historii basha bez jego wykonania? na przykład

$ cmd [a long list of arguments] 

a teraz podczas pisania pamiętam, że najpierw chciałbym zrobić coś innego. Czy mogę prosić o coś takiego?

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

i to tak naprawdę się nie uruchamia, ale przechodzi do historii basha, aby móc go później użyć?


źródło
5
W takiej sytuacji po prostu poprzedzam wiersz #, a następnie naciśnij Enter.
Oliver Charlesworth

Odpowiedzi:

5

Może być lepszy sposób, ale możesz użyć :pmodyfikatora rozszerzenia historii, aby wydrukować bieżący wiersz komentarza bez wykonywania. !#jest bieżącą linią i %sam w sobie nic nie pasuje

$ cmd [arguments] !#%:p
Pigułki przeciwwybuchowe
źródło
fajne! ;) i bez potrzeby ucieczki ze specjalnych znaków w poleceniu, co może się popsuć, jeśli polecenie to nie tylko ls -al+1
fajne! bardzo schludnie
8

Użyj -sopcji do historypolecenia:

history -s cmd arg1 arg2

Wywołanie do history -ssiebie, dogodnie, nie jest dodawane do historii poleceń, więc w twojej historii wygląda to tak, jakbyś wykonał to cmdbez robienia tego.

chepner
źródło
fajne! to też jest niesamowite
1

Zwykle odbywa się to przez

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

Pamiętaj, że nazwa historii może różnić się w twoim systemie. Dlatego możesz korzystać ze HISTFILEśrodowiska var

co sprawia, że:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"
hek2mgl
źródło
1

Zwykle po prostu dodaję # na początku wiersza, aby przekształcić wiersz w komentarz:

#cmd [a long list of arguments] 

Wolę to, ponieważ możesz to zrobić za pomocą 3 [4, jeśli potrzebujesz SHIFT, aby wstawić #] naciśnięcia klawiszy

^a#<ENTER>

^ a przechodzi na początek bieżącej linii

# dodaje komentarz

ENTER wykonuje komentarz

użytkownik3726536
źródło
0

W takiej sytuacji po prostu poprzedzam wiersz znakiem #, a następnie naciśnij klawisz Enter.

... lub użyj kombinacji klawiszy: ESC #

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

Zobacz także: Bash - zapisz polecenie bez jego wykonania


źródło
0

Możesz spróbować dodać spację i | (potok) na końcu linii, naciśnij Enter, a następnie Ctrl-C'ing.

( Space, |, Enter, Ctrl+ C)

Polecenie będzie w twojej historii z | na końcu (można po prostu usunąć za pomocą backspace) zamiast # na początku (potencjalnie bardziej nużące do usunięcia).

ZASTRZEŻENIE: Nie wiem, czy to zawsze działa! Używaj na własne ryzyko!

$ cmd [długa lista argumentów] |

> Ctrl+C

$ Up

$ cmd [długa lista argumentów] |

Josiah Krutz
źródło
0

Możesz spróbować użyć tej linii:

history -s -p $COMMAND

Od help:

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

Oznacza to, że możesz rozwijać takie rzeczy, jak !!i przechowywać wynik na dole historii.

Felipe Alvarez
źródło
history -sudzielono w odpowiedzi dwa lata temu. Czy to -ppoprawia? Co ma -pzrobić? (W zakresie, w jakim ma to sens, należy edytować odpowiedź, aby była lepsza, i nie odpowiadać na mój komentarz innym komentarzem.)
G-Man mówi „Przywróć Monikę”
0

Inną opcją jest przejście do początku linii i zrobienie tego, co miałeś zrobić, a następnie &&, na przykład

rm old_file && cmd [args]

Więc jeśli to, co chciałeś zrobić, powiedzie się, twoje polecenie uruchomi się natychmiast, a jeśli się nie powiedzie, polecenie nie uruchomi się, ale będzie w historii. Ty też możesz to zrobić

test && cmd [args]

Ponieważ test bez argumentów zakończy się niepowodzeniem, ale jest to garść dodatkowych naciśnięć klawiszy w porównaniu do #metody.

Nickolai
źródło
0

Myślę, że „niektórymi naciśnięciami klawiszy”, które chcesz, są Ctrl-U i Ctr-Y, które przechowują linię w pierścieniu zabijania, a następnie wyciągają ją z powrotem później. To nie wchodzi do historii, ale myślę, że nie powinno, bo tego nie zrobiłeś.

Readline Polecenia zabijania

Zabijanie i szarpanie

Nauczyłem się tego lata temu, potem zapomniałem i szukałem też tych kluczowych uderzeń.

Omówiono tu także: /unix/140741/how-to-save-a-command-you-entered-without-executing-it

scipilot
źródło