Uruchamianie podpowłoki od połowy bieżącego polecenia

16

W tym scenariuszu często znajduję się. Jestem w trakcie pisania polecenia i muszę sprawdzić coś jeszcze przed jego wykonaniem.

Czy istnieje sposób na otwarcie jakiejś podpowłoki z zapamiętywaniem dotychczasowych danych wejściowych, a kiedy wychodzę z tej podpowrotki, wracam do miejsca, w którym byłem?

$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>

używam zsh

Panayiotis
źródło
2
Dlaczego nie otworzyć kolejnego okna terminala?
Barmar
@Barmar Dla mnie nie używam GUI na większości moich systemów Linux, więc musiałbym zmienić TTY. Co oznacza, że ​​muszę ponownie uwierzytelnić. Poniższe opcje są znacznie wydajniejsze.
Zachary Brady
3
Możesz użyć screenlub, tmuxaby uzyskać wiele wirtualnych terminali na konsoli.
Barmar

Odpowiedzi:

16

Istnieje kombinacja klawiszy, EscQktóra zapisuje bufor poleceń i pozwala wprowadzić nowe polecenie. Po uruchomieniu polecenia bufor zawiera to, co wpisałeś wcześniej. Jeśli musisz wykonać inne polecenie przed zakończeniem tego, możesz wpisać EscQponownie.

(Nie próbowałem otwierać podpowłoki po naciśnięciu EscQ.)

Zobacz http://zsh.sourceforge.net/Intro/intro_10.html i wyszukaj „esc-q”

Bodo
źródło
Właśnie tego chciałem, wielkie dzięki! Mógłbym sprawić, aby uruchomił zagnieżdżoną powłokę zamiast wracać od razu, ale w moim przypadku natychmiastowe zwrócenie działa idealnie.
Panayiotis,
7

Moje rozwiązanie tego problemu jest zdecydowanie low-tech i niezgrabne, ale opiera się na kluczowych sekwencji prawdopodobnie jesteś już obeznany z: Hit Ctrl+ A, potem #, potem ENTER.

Powoduje to wstawienie znaku „a” #na początku wiersza, czyniąc go komentarzem, a następnie wykonując go, a tym samym wypychając go do historii poleceń. Możesz następnie wprowadzić polecenie pomocnicze, a następnie przewinąć w górę historię poleceń do polecenia z komentarzem, usunąć #i wykonać polecenie w razie potrzeby.

Cyfrowa trauma
źródło
Powinieneś nacisnąć przycisk „home” na klawiaturze, oszczędza to 1 naciśnięcie klawisza i energię potrzebną do jego naciśnięcia
Ferrybig
@ Ferrybig - tak, to dobrze, choć moją codzienną klawiaturą jest MacBook Pro, który nie ma klawisza HOME . Odpowiednikiem HOME jest FN + STRZAŁKA W LEWO , ale przewija w górę do górnej części terminala.
Cyfrowy uraz
2

Wpisuję Ctrl+, Zaby „zawiesić” polecenie, które wpisuję, i wpisuję inne polecenie. Po uruchomieniu tego polecenia (lub przerwaniu go za pomocą Ctrl+ C) zawieszone polecenie wraca do edycji (nawet zapamiętuje pozycję kursora). Jako dodatkową wygodę, jeśli wiersz poleceń jest pusty, gdy wpisuję Ctrl+ Z, klawisz wywołuje bgwbudowane (zamiast tego podwójne Ctrl+ Zwysyła uruchomione polecenie bezpośrednio w tło).

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

(Wcześniej opublikowane na stronie Remember, wpisane na wpół polecenie, podczas gdy sprawdzam coś, co zawiera głównie rozwiązania dla bash, w których nie można zrobić nic tak wygodnego. Jest to nieco bardziej wyszukana wersja wbudowanego wiązania M-qdopush-line .)

To nie uruchamia podpowłoki: polecenie, które wpisujesz po „zawieszeniu” poprzedniego, działa w tej samej powłoce. Dzięki temu możesz np. Zmienić bieżący katalog, jeśli po wpisaniu polecenia masz zamiar uruchomić go w innym katalogu. Jeśli chcesz uruchomić nową instancję powłoki, możesz uruchomić zshz powiązania klucza, ale nie sądzę, aby było to szczególnie przydatne.

Gilles „SO- przestań być zły”
źródło