web-dev-qa-db-fra.com

Comment insérer des tabulations avant les lignes de sortie d'une commande exécutée

Juste une petite question. Est-il possible de tabuler la sortie sur Ubuntu 16.04 LTS? J'ai créé deux images ci-dessous pour essayer d'illustrer ce que je veux dire par là.

img1

img2

14
Alex Ng

Vous pouvez faire quelque chose comme ceci - avec des descripteurs de fichier:

  1. enregistrer le descripteur de sortie actuel afin que nous puissions le restaurer plus tard

    exec 3>&1
    
  2. redirige le flux de sortie vers un substitution de processus qui insère l'onglet - par exemple

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

À partir de ce moment, tout processus qui écrit dans la sortie standard aura cette sortie "filtrée" via la commande paste pour insérer des tabulations au début.

  1. Lorsque vous avez terminé, vous pouvez reprendre le comportement normal en restaurant le descripteur de fichier enregistré et en fermant le descripteur temporaire.

    exec 1>&3 3>&-
    
15
steeldriver

Je comprends que cette réponse n’est pas optimale pour vous, mais vous pouvez créer une fonction Bash avec le simple nom _ (ou tout autre élément non encore utilisé) qui exécute la commande qu’elle obtient en tant qu’arguments et indente l’ensemble de sa sortie avec une tabulation.

Un exemple:

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

Le code de cette fonction serait seulement ceci:

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

Vous pouvez l'ajouter à votre fichier ~/.bashrc afin qu'il soit disponible dans toutes les sessions Bash de votre utilisateur en exécutant:

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

Si vous souhaitez le rendre disponible pour tous les utilisateurs, ajoutez-le plutôt à /etc/bash.bashrc (nécessite des droits d'administrateur):

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

Sinon, vous pouvez également créer un fichier de script tel que /usr/local/bin/_ avec le contenu suivant pour obtenir la même chose sans les fonctions Bash et pour tous les utilisateurs:

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

Vous devez rendre le script exécutable après avoir sauvegardé le fichier avec

Sudo chmod +x /usr/local/bin/_
8
Byte Commander

Avec echo en particulier, vous pouvez le faire interpréter les caractères d'échappement des barres obliques inverses tels que \t (a tab stop ) avec le commutateur -e:

echo -e "\tHello World"

Mais il serait difficilement réalisable (ou probablement possible) de modifier le résultat de chaque commande de cette façon. Si votre objectif est de faciliter la lecture, vous pouvez envisager de personnaliser l'apparence (par exemple, la coloration) de votre invite de commande, comme illustré ci-dessous:

Vous pouvez personnaliser votre invite en modifiant le contenu de la variable d'environnement PS1. Vous pouvez voir un petit exemple de la manière de le faire dans le article de blog la capture d'écran ci-dessus provient de. Comment utiliser ces soi-disant séquences d'échappement ANSI en détail, comment utiliser des outils plus confortables, comment appliquer les modifications par défaut dans les nouveaux terminaux, etc. sort du cadre de cette réponse. Mais si vous décidez d'utiliser cette technique, de nombreux tutoriels et autres informations sont disponibles sur le Web.

5
Henning Kockerbeck