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ć?


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

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.


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"

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


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


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] |


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.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.