Come inserire le schede prima delle righe di output da un comando eseguito


16

Solo una domanda veloce. È possibile eseguire il tab dell'output su Ubuntu 16.04 LTS? Ho creato due immagini qui sotto per cercare di illustrare cosa intendo con questo.

img1

img2


1
Va bene se devi reindirizzare l'output del comando attraverso un altro comando simile YOUR COMMAND | indento se devi digitare un altro comando davanti ad esso (potrebbe anche essere solo un trattino basso) come _ YOUR COMMAND?
Byte Commander

1
@ByteCommander L'ho considerato, tuttavia lo sto facendo per facilità d'uso e per facilitare la lettura dell'output della console. Quindi non penso che il piping di tutti i miei comandi sia la soluzione. Grazie per la risposta e modifica però!
Alex Ng,

1
[Per favore, non pubblicare screeshots di output di testo. ] ( meta.askubuntu.com/q/8713/85695 )
terdon,

Risposte:


15

Potresti fare qualcosa del genere - con i descrittori di file:

  1. salva il descrittore di output corrente in modo da poterlo ripristinare in seguito

    exec 3>&1
  2. reindirizzare il flusso di output su una sostituzione di processo che inserisce la scheda, ad esempio

    exec 1> >(paste /dev/null -)

Da questo punto, qualsiasi processo che scrive nell'output standard avrà quell'output "filtrato" tramite il pastecomando per inserire le schede all'inizio.

  1. Al termine, è possibile riprendere il normale comportamento ripristinando il descrittore di file salvato e chiudendo quello temporaneo

    exec 1>&3 3>&-

Vorrei ringraziarti per la risposta. Questo è il più vicino a cui sono arrivato a una soluzione anche se non è perfetto.
Alex Ng,

@AlexNg grazie per il voto - in che modo specificamente non fa quello che hai chiesto? se mi fai sapere che proverò a migliorarlo
steeldriver

Per fare alcuni esempi: Dopo aver inserito i tuoi comandi, alcuni comandi funzionano come previsto come 'php -v', 'hostname' e altri. Tuttavia, quando si utilizza un comando come 'echo Hello World', l'output viene visualizzato in linea con l'input e influisce anche negativamente sull'aspetto visivo dell'input quando si immette il comando successivo. Inoltre, alcuni altri comandi non vengono influenzati dal processo di tabulazione, ad esempio quando si immette un comando non valido come 'asdasd'.
Alex Ng,

Infine, non visualizza correttamente l'output che cambia (non sono sicuro di come descriverlo correttamente, ci scusiamo). Ad esempio, se viene utilizzato il comando 'apt-get update', ci sono differenze notevoli quando lo si confronta con una console senza il processo di tabulazione.
Alex Ng,

Il problema è che questo approccio gestisce solo STDOUT (flusso 1), ma non STDERR (flusso 2). Inoltre interrompe l'output di programmi che utilizzano lesso strumenti simili per consentire lo scorrimento dell'output, come ad es man.
Byte Commander

9

Capisco che questa risposta non sia ottimale per te, ma potresti fare una funzione di Bash con il semplice nome _(o qualsiasi altra cosa che non è ancora stata usata) che esegue il comando che ottiene come argomenti e rientra tutto il suo output con una scheda.

Un esempio:

$ _ lsb_release -a
        No LSB modules are available.
        Distributor ID: Ubuntu
        Description:    Ubuntu 16.04 LTS
        Release:    16.04
        Codename:   xenial

Il codice di questa funzione sarebbe solo questo:

_(){ sed "s/^/\t/" <($*); }

Puoi aggiungerlo al tuo ~/.bashrcfile in modo che sia disponibile in tutte le sessioni Bash del tuo utente eseguendo:

echo '_(){ sed "s/^/\t/" <($*); }' >> ~/.bashrc

Se vuoi renderlo disponibile a tutti gli utenti, aggiungilo /etc/bash.bashrcinvece (richiede i diritti di amministratore):

echo '_(){ sed "s/^/\t/" <($*); }' | sudo tee -a /etc/bash.bashrc

In alternativa puoi anche creare un file di script simile /usr/local/bin/_al seguente contenuto per ottenere lo stesso senza le funzioni di Bash e per tutti gli utenti:

#!/bin/bash
sed "s/^/\t/" <($*)

È necessario rendere eseguibile lo script dopo aver salvato il file utilizzando

sudo chmod +x /usr/local/bin/_

5

Con in echoparticolare, puoi fare in modo che interpreti le escape di barra rovesciata come \t(un punto di tabulazione ) con l' -einterruttore:

echo -e "\tHello World"

Ma sarebbe quasi impossibile (o probabilmente possibile) modificare l'output di ogni comando in quel modo. Se la facilità di lettura è il tuo obiettivo, potresti voler esaminare la personalizzazione dell'aspetto (ad esempio la colorazione) del prompt dei comandi, come mostrato qui:

È possibile personalizzare il prompt modificando il contenuto della variabile di ambiente PS1. Puoi vedere un piccolo esempio di come farlo nel post del blog di cui sopra lo screenshot. Come utilizzare in dettaglio le cosiddette sequenze di escape ANSI, come utilizzare strumenti più comodi, come applicare le modifiche per impostazione predefinita nei nuovi terminali, ecc., Vanno oltre lo scopo di questa risposta. Ma se decidi di utilizzare quella tecnica, ci sono molti tutorial e ulteriori informazioni sul Web.


Grazie per la risposta, tuttavia ho già cambiato PS1 a mio piacimento.
Alex Ng,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.