Chciałbym wiedzieć, jak ponownie wykorzystać ostatnie wyjście z konsoli, tj .:
pv-3:method Xavier$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/Library/Python/2.6/site-packages
pv-3:method Xavier$ cd **LASTOUTPUT**
shell
command-line
io-redirection
methodofaction
źródło
źródło
/dev/tty
, ale powinno być możliwe przechwytywanie wszystkiego wysyłanego dostdout
lubstderr
, co może być odpowiednie.Odpowiedzi:
Zakładając bash:
źródło
`backtick-commands`
!cd $(dirname $(which python))
nadchodzę!Nie wspomniano jeszcze, użyj zmiennej:
źródło
cd $dir
Wszystkie pozostałe rozwiązania obejmują modyfikację przepływu pracy lub dwukrotne uruchomienie polecenia, co może nie być odpowiednie, jeśli uruchomienie zajmuje dużo czasu lub nie jest powtarzalne (np. Usuwa plik - ponowne uruchomienie spowodowałoby inny wynik).
Oto bardziej skomplikowany pomysł, jeśli go potrzebujesz:
.bashrc
monit bash
Ma to pewne problemy, więc jest to po prostu punkt wyjścia. Na przykład plik wyjściowy (
~/<pid>.out
) może stać się bardzo duży i zapełnić dysk. Ponadto cała skorupa może przestać działać, jeślitee
umrze.Można go zmodyfikować tak, aby przechwytywał dane wyjściowe z poprzedniego polecenia za pomocą
preexec
iprecmd
przechwytuje w zsh lub emuluje je w bashu, ale bardziej skomplikowane jest to tutaj.źródło
tee
przed sygnałami (spróbuj nacisnąćCtrl+C
i uruchomić więcej poleceń). Użyjscript
narzędzia, które nie ma żadnego z tych problemów.Roboczy projekt tradycyjnej powłoki:
Teraz możemy przechwycić ekran do pliku. Potrzebuje sudo.
Apropos
screendump
: tak nazwany program już dla mnie nie działa. Może tylko dla starszych jąder. / dev / pts / N też dla mnie nie działał. Może masz jakieś opcjonalne MKDEV w / dev - o niektórych pamiętam ponuro/dev/cuaN
, ale mogę się mylić.Chcielibyśmy przesyłać dane wyjściowe zamiast używać screen.dump. Ale jakoś to nie działa - czasami czeka na ENTER.
Przechwytywanie nie jest zwykłym plikiem tekstowym z liniami, ale z - na przykład - znakami 80x50 w jednej sekwencji.
Aby wybrać ostatnie 2 wiersze, 1 dla wyniku polecenia i jeden dla wiersza polecenia, cofam go, wybieram 160 znaków, cofam ponownie i wybieram 80.
Na wszelki wypadek zastanawiałeś się, dlaczego istnieje
rev
program.Krytyka:
Pierwszy schemat jest wykonany za pomocą replace.py
źródło
alias tee2tty='tee $(readlink /proc/$$/fd/1)'
Spróbuj tego:
źródło
Oto odpowiedź:
Jeśli korzystasz z X, wybierz dane wyjściowe za pomocą myszy, aby je skopiować, a następnie kliknij środkowym przyciskiem myszy, aby je wkleić.
Jeśli korzystasz z konsoli tekstowej, możesz zrobić podobnie z gpm .
źródło
(Niestety nie jest to robocza odpowiedź, ale wciąż coś ciekawego. Ktoś zainteresowany mógłby spróbować ukończyć implementację funkcji, o której ci powiem.)
W
eshell
środku Emacs, chcieli mieć taką funkcję, a jednak nie jest realizowane w sposób kompletny (co jest jednak odzwierciedlenie w dokumentacji ).Na przykład:
Widzisz, tylko dane wyjściowe wbudowanych mogą być przechwytywane do
$$
zmiennej.Ale cóż, niektóre programowanie elisp (por.
eshell-mark-output
Implementacja w „esh-mode.el”) i można zaimplementować funkcję, która „zaznacza” ostatnie wyjście i zwraca je jako wynik funkcji; abyś mógł użyć tej funkcji w żądanym poleceniu eshell - funkcje elisp mogą być używane w poleceniach eshell ze zwykłą składnią elisp, tj. w nawiasach, takich jak:źródło
Jeśli zdasz sobie sprawę, że będziesz chciał ponownie wykorzystać dane wyjściowe przed trafieniem Enter, możesz zapisać je w zmiennej: dodaj
tmp=$(
na początku wiersza i)
na końcu. (Spowoduje to usunięcie pustej linii na końcu danych wyjściowych polecenia i w rzeczywistości usuwa końcową nową linię; to rzadko ma znaczenie).Jeśli twoją powłoką jest ksh lub zsh, oto przydatna funkcja, której możesz użyć, aby uczynić ją bardziej automatyczną. (Bash nie pomaga, ponieważ wymaga wykonania ostatniego polecenia w potoku w powłoce nadrzędnej, co ma miejsce tylko w przypadku ksh (nie pdksh) i zsh.)
Użyj tego w ten sposób:
źródło
(w oparciu o odpowiedź 4485 )
To dużo pisania, więc zrób alias:
Następnie po prostu zadzwoń
cd $(python -c ... | tee2tty)
To oczywiście wymaga, abyś już wiedział, co chcesz zrobić z wyjściem, ale ma tę zaletę, że wywołuje polecenie tylko raz.
źródło
da rade.
Przeczytaj tutaj, aby uzyskać więcej informacji: Zastępowanie poleceń .
źródło
Istnieje lepsze rozwiązanie:
Wystarczy wydrukować
!!
po wykonaniu polecenia, a otrzymasz powtarzalne wyjście.Na przykład
Oryginał:
https://askubuntu.com/questions/324423/how-to-access-the-last-return-value-in-bash
źródło
!!
nie powtarza wyniku ostatniego polecenia, ponownie uruchamia ostatnie polecenie. Jeślijot -r 1 0 1000
zwróci pojedynczą liczbę losową z przedziału od 0 do 1000, po jednokrotnym uruchomieniu tej komendy i uzyskaniu jej539
uruchomienie!!
najprawdopodobniej poda inną liczbę.!!
może być również niepożądane, jeśli poprzednie polecenie zajmuje dużo czasu lub powtarza operację, której nie należy powtarzać (np. zmianę pliku).