GNU/Linux >> Znalost Linux >  >> Linux

Automaticky zachytit výstup posledního příkazu do proměnné pomocí Bash?

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.


Linux
  1. Jak přiřadit výstup příkazu Linux k proměnné

  2. Proč je nastavení proměnné před příkazem v Bash legální?

  3. Jak uložit odpovídající vzor do proměnné pomocí příkazu „sed“?

  1. Použití příkazu Linux Basename ve skriptech Bash

  2. Bash zachycující výstup awk do pole

  3. Jak načíst poslední řádek textového souboru do proměnné pomocí Bash?

  1. Jak přiřadit výstup příkazu proměnné shellu?

  2. Ukládání výstupu příkazu do proměnné Shell?

  3. Použití odkazu na proměnnou bashového řetězce v Sed?