Wstaw linie do historii bashu

9

Domyślnie bash ładuje linie od ~/.bash_historydo historii. Czy można dodać niestandardowy plik do załadowania? Chcę wstrzyknąć plik zawierający często używane polecenia i uzyskać do nich dostęp za pomocą wbudowanego wyszukiwania.

rgtk
źródło
2
Zazwyczaj ludzie dodają aliasy dla często używanych poleceń ...
HBruijn
To wspaniale. Ale tak nie jest - używam aliasów do poleceń, których używam stale, ale mam wiele poleceń, które mają dużą liczbę argumentów, które chcę zmodyfikować w zależności od okoliczności.
rgtk
4
Będziesz musiał wypróbować jakąś modyfikację pliku, która brzmi raczej szalenie i może nie działać. Po prostu ułóż swoje długie polecenia w skrypcie powłoki, który przyjmuje argumenty i wrzuć /usr/local/binlub coś w tym stylu
Wesley
Jeśli często ich używasz, to czy i tak nie byłyby w twojej historii?
Zadeklarować funkcje w .bashrc?
Mark K Cowan

Odpowiedzi:

13

Ułatwiam to dzięki alias h='history|grep'załadowaniu do mojego profilu Bash.

Mój przepływ pracy to h commandna przykład: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

Jeśli chcę uruchomić „ hpssa -stop”, po prostu wpisałbym!226


To tylko moje podejście, ale może mógłbyś zmodyfikować sposób, w jaki przywołujesz przedmioty historii. Nie sądzę, aby sensowne było wprowadzanie danych do pliku historii.

ewwhite
źródło
niezła sztuczka, kradzież tego
wim
Zasugeruj, byś mógł rzucić okiem na to, co robi Ctrl-R podczas przeszukiwania historii. Przygotuj się na przesadzenie ...
2
@CameronKerr Spójrz na odpowiedź poniżej tej ( serverfault.com/a/695115/120438 ). Wadą używania Ctrl + R w tym konkretnym przypadku jest to, że daje on odpowiednie polecenia pojedynczo, podczas gdy ewwhite's Podejście zwraca listę wszystkich odpowiednich poleceń.
Jenny D
Chociaż jest to świetna sztuczka, wcale nie odpowiada na pytanie. Nie rozumiem, w jaki sposób jest to najwyżej głosowana odpowiedź. Moją sprawą jest to, że mam obraz dokera, który traci swoją historię, kiedy go opuszczam. Pomyślałem, że byłoby miło, gdybym mógł przekazać plik historii za pomocą wiersza polecenia dodocker run ...
kumarharsh
@kumar_harsh Trudno zadowolić.
ewwhite
7

Kiedyś byłem bardzo zależny od Ctrl-R( reverse-search-historypolecenie Readline), które przeszukuje historię, aby odzyskać wcześniej wprowadzone długie polecenia, ale teraz wolę używać aliasów i skryptów / funkcji powłoki. W każdym razie historymożna użyć wbudowanego polecenia Bash, aby załadować listę poleceń niestandardowych do bieżącej historii.

history -r [filename]

Ze strony podręcznika użytkownika bash:

Przeczytaj zawartość pliku historii i dołącz go do bieżącej listy historii.

Automatyzacja rozruchu

Właśnie próbowałem uruchomić to polecenie automatycznie, dodając je jako ostatni wiersz w moim .bashrc. Jednak polecenia z mojego niestandardowego pliku historii nie były dostępne po uruchomieniu nowej powłoki. Wygląda na to, że historia powłoki jest ładowana tylko z .bash_historypliku domyślnego : po przetworzeniu plików startowych i tuż przed wyświetleniem monitu o interaktywną powłokę. Niestety wydaje się, że nie ma łatwego sposobu na zautomatyzowanie tego.

Anthony Geoghegan
źródło
2

Jak zauważył @AnthonyGeoghegan, historia jest ładowana po przetworzeniu plików startowych. To oferuje inny sposób na wstępne załadowanie żądanej historii w pliku startowym:

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.

Zauważ, że takie podejście może z czasem spowodować dodanie wielu kopii specjalnych poleceń do historii .bash_hash. Możesz zawijać swoje specjalne polecenia liniami komentarzy, abyś mógł je łatwo znaleźć i usunąć (poprzez np. Sed) w ramach wypełniania pliku .bash_history. Coś jak:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
schnitz
źródło