Czy istnieje standardowy sposób odwrócenia kolejności wyjściowej danych wyjściowych terminala, tj .:
~/Developer $ command0
-bash: comman0: command not found
~/Developer $ command2
-bash: command2: command not found
~/Developer $ command3
-bash: command3: command not found
~/Developer $
będzie wyświetlany jako:
~/Developer $
-bash: command3: command not found
~/Developer $ command3
-bash: command2: command not found
~/Developer $ command2
-bash: comman0: command not found
~/Developer $ comman0
Wydaje mi się, że zawsze wyświetlenie monitu na dole jest sprzeczne z intuicją, co jest bardziej skutecznym sposobem prezentacji wyjścia, aby odwrócić kolejność wyjściową. Jak mogę to zrobić? W szczególności, gdzie zdefiniowano część wyjściową programu terminalowego OSX?
bash
.).Odpowiedzi:
W bash wyświetli to bieżące polecenie / polecenie u góry, a jego wynik poniżej, ale bez przewijania lub poprzednich poleceń:
Ta funkcja umieści poprzednie polecenia poniżej, ale musisz przypisać do nich każde polecenie osobno. Niestety,
exec > >(f)
nic na to nie poradzę, ponieważ przekierowuje cały bash, a nie poszczególne polecenia. Oto funkcja:Następnie uruchom każde polecenie, takie jak:
Zapisuje dane wyjściowe, tworzy liczbę pustych linii równych długości + 1, a następnie ponownie umieszcza dane wyjściowe. Możesz oznaczyć linię na końcu, która wyświetli fałszywy monit lub regułę poziomą, jeśli chcesz. Na przykład
Jako bzdura, ale automatyczna alternatywa dla tej całej funkcji, możemy dodać polecenie na końcu naszego wcześniejszego $ PROMPT_COMMAND, który usuwa nieco dowolne 11 linii:
Możesz także użyć,
tput -S
aby uniknąć wielu połączeń binarnych.Mam
$PROMPT_COMMAND
od https://github.com/swirepe/alwaysontop .źródło
Niestety będzie to dość trudne. Protokół między aplikacjami a terminalem OS-X jest odmianą protokołu kontroli terminala VT100 / ANSI , w szczególności protokołu XTerm .
Obejmuje to szereg założeń dotyczących położenia ekranu itp., Których mapowanie do świata, w którym wyświetlanie zostało odwrócone, byłoby trudne.
Co gorsza, wszystko, co dostaje emulator terminala, to ciąg poleceń typu „postaw ten znak w tej pozycji”. Nie ma rozróżnienia między wierszem polecenia a wynikiem działania uruchomionego przez niego polecenia, więc nie można zrobić jednej rzeczy dla obu części - przynajmniej nie bez współpracy powłoki poniżej.
Powłoka i programy zakładają, że ekran przesuwa się w górę - nowe dane na dole i przenosi w dół na zawsze.
Mógłbyś, przynajmniej teoretycznie, zmodyfikować emulator terminala, tak aby wyświetlał linie w odwrotnej kolejności - najpierw „dolna” linia, i tak dalej, aż do „górnej” linii na dole ekranu.
Spowodowałoby to jednak odwrócenie kolejności wierszy w danych wyjściowych polecenia, więc reszta treści również wyskakowałaby do tyłu. Jeśli chcesz, aby polecenia (np. Ls, cat) były uruchamiane „w dół”, ale monit o przeniesienie „w górę”, życie jest trudniejsze.
Nie znam żadnego oprogramowania, które to implementuje. (... ale zobacz komentarz JdeBD do tego linku do jednego.) :)
źródło
Chociaż nie będzie to dokładnie odwracało danych wyjściowych, zachowa monit na górze:
https://github.com/swirepe/alwaysontop
Aby go użyć, uruchom:
Jeśli uznasz, że Ci się podoba, po prostu pobierz go w pliku .bash_profile za pomocą czegoś takiego:
źródło