Toto je opravdu otřesné řešení, ale zdá se, že většinou funguje. Během testování jsem si všiml, že při získávání ^C to někdy nefungovalo příliš dobře na příkazovém řádku, i když jsem to trochu upravil, aby se choval o něco lépe.
Tento hack je pouze hack v interaktivním režimu a jsem si docela jistý, že bych ho nikomu nedoporučoval. Příkazy na pozadí pravděpodobně způsobí ještě méně definované chování než normálně. Ostatní odpovědi jsou lepší způsob, jak programově dosáhnout výsledků.
Jak již bylo řečeno, zde je „řešení“:
PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'
Nastavte tuto proměnnou prostředí bash a vydávejte příkazy podle potřeby. $LAST
bude mít obvykle výstup, který hledáte:
startide seth> fortune
Courtship to marriage, as a very witty prologue to a very dull play.
-- William Congreve
startide seth> echo "$LAST"
Courtship to marriage, as a very witty prologue to a very dull play.
-- William Congreve
Nevím o žádné proměnné, která by to dělala automaticky . Chcete-li udělat něco jiného než jen zkopírovat a vložit výsledek, můžete znovu spustit, co jste právě udělali, např.
vim $(!!)
Kde !!
je rozšíření historie, což znamená 'předchozí příkaz'.
Pokud očekáváte, že bude existovat jeden soubor s mezerami nebo jinými znaky, které by mohly bránit správné analýze argumentů, ocitujte výsledek (vim "$(!!)"
). Pokud jej ponecháte bez uvozovek, umožníte otevření více souborů najednou, pokud neobsahují mezery nebo jiné tokeny analýzy shellu.