Piszę prosty skrypt, aby przeglądać moją historię bashów w celu znalezienia określonego ciągu. W wierszu polecenia mogę wykonać następujące czynności, które działają dobrze:
history | grep git
Jednak gdy tworzę skrypt bashowy za pomocą tego samego polecenia co powyżej, nagle history
nic nie zwraca:
#!/bin/bash
history | grep git
Kiedy usuwam pierwszy wiersz #!/bin/bash
, mój skrypt działa ponownie. Co tu się dzieje? Jak mogę używać history
w skrypcie bash?
bash
shell-script
command-history
Martin Vegter
źródło
źródło
bash
użytkownik v3, z samej frustracji, haha). Przynajmniej dla Martina moje rozwiązanie było bardzo pomocne, to (przynajmniej) komfort.Po uruchomieniu skryptu powłoki bash, na przykład poprzez uruchomienie pliku wykonywalnego, którego linia shebang jest
#!/bin/bash
, skrypt jest uruchamiany w nieinteraktywnej powłoce. Jedną z cech nieinteraktywnej powłoki jest wyłączenie historii. Jeśli więc chcesz, aby skrypt mógł korzystać z historii, musisz zrobić coś takiego:Oczywiście w tym przypadku mógłbyś właśnie zrobić:
Ponieważ oba powyższe wymagają, aby plik historii (
~/.bash_history
) był aktualny, co prawie na pewno nie będzie.Nie jestem pewien, jak uruchamiasz skrypt po usunięciu linii shebang. Pozyskanie pliku (np. Z
.
) nie jest tym samym, co uruchomienie skryptu, ponieważ polecenia działają w bieżącej powłoce, która ma włączoną historię.źródło
history -a
zaraz po poleceniu set, aby upewnić się, że ostatnie polecenia są najpierw dołączane do pliku?