Cómo insertar pestañas antes de las líneas de salida de un comando ejecutado


16

Solo una pregunta rápida. ¿Es posible tabular la salida en Ubuntu 16.04 LTS? He creado dos imágenes a continuación para tratar de ilustrar lo que quiero decir con esto.

img1

img2


1
¿Estaría bien si tiene que canalizar la salida del comando a través de otro comando como YOUR COMMAND | indento si tiene que escribir otro comando delante de él (incluso podría ser solo un guión bajo) como _ YOUR COMMAND?
Byte Commander

1
@ByteCommander Lo he considerado, sin embargo, estoy haciendo esto para facilitar su uso y hacer que la salida de la consola sea más fácil de leer. Así que no creo que conectar todos mis comandos sea la solución. Gracias por la respuesta y editar sin embargo!
Alex Ng

1
[No publique capturas de pantalla de salida de texto. ] ( meta.askubuntu.com/q/8713/85695 )
terdon

Respuestas:


15

Podría hacer algo como esto, con descriptores de archivo:

  1. guardar el descriptor de salida actual para que podamos restaurarlo más tarde

    exec 3>&1
  2. redirigir la secuencia de salida a una sustitución de proceso que inserte la pestaña, por ejemplo

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

A partir de este punto, cualquier proceso que escriba en la salida estándar tendrá esa salida 'filtrada' a través del pastecomando para insertar pestañas al inicio.

  1. Cuando haya terminado, puede reanudar el comportamiento normal restaurando el descriptor de archivo guardado y cerrando el temporal

    exec 1>&3 3>&-

Me gustaría agradecerle por la respuesta. Esto es lo más cerca que he llegado a una solución, aunque no es perfecta.
Alex Ng

@AlexNg gracias por el voto a favor: ¿de qué manera específicamente no hace lo que pediste? si me
avisas

Para dar algunos ejemplos: después de ingresar sus comandos, algunos comandos funcionan según lo previsto, como 'php -v', 'hostname' y otros. Sin embargo, cuando se usa un comando como 'echo Hello World', la salida se muestra en línea con la entrada y también afecta negativamente la apariencia visual de la entrada al ingresar el siguiente comando. Algunos otros comandos tampoco se ven afectados por el proceso de tabulación, como cuando se ingresa un comando no válido como 'asdasd'.
Alex Ng

Finalmente, no muestra correctamente la salida que cambia (no estoy seguro de cómo describir esto correctamente, disculpas). Por ejemplo, si se usa el comando 'apt-get update', existen diferencias notables al compararlo con una consola sin el proceso de tabulación.
Alex Ng

El problema es que este enfoque solo maneja STDOUT (secuencia 1), pero no STDERR (secuencia 2). También rompe la salida de programas que usan lessherramientas similares para permitir el desplazamiento de la salida, como por ejemplo man.
Byte Commander

9

Entiendo que esta respuesta no es óptima para usted, pero podría hacer una función Bash con el nombre simple _(o cualquier otra cosa que aún no se use) que ejecute el comando que obtiene como argumentos y sangra todo su resultado con una pestaña.

Un ejemplo:

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

El código de esta función solo sería este:

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

Puede agregarlo a su ~/.bashrcarchivo para que esté disponible en todas las sesiones de Bash de su usuario ejecutando:

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

Si desea que esté disponible para todos los usuarios, añádalo en su /etc/bash.bashrclugar (requiere derechos de administrador):

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

Alternativamente, también podría crear un archivo de script como /usr/local/bin/_el siguiente contenido para lograr lo mismo sin las funciones Bash y para todos los usuarios:

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

Debe hacer que el script sea ejecutable después de guardar el archivo usando

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

5

Con echoespecíficamente, se puede tener escapes interpretar como barra invertida \t(una tabulación ) con el -einterruptor:

echo -e "\tHello World"

Pero difícilmente sería factible (o probablemente posible) modificar la salida de cada comando de esa manera. Si su objetivo es la facilidad de lectura, es posible que desee personalizar la apariencia (por ejemplo, el color) de su símbolo del sistema, como se muestra aquí:

Puede personalizar su solicitud cambiando el contenido de la variable de entorno PS1. Puede ver un pequeño ejemplo de cómo hacerlo en la publicación del blog de la que proviene la captura de pantalla anterior. Cómo usar las llamadas secuencias de escape ANSI en detalle, cómo usar herramientas que sean más cómodas, cómo aplicar los cambios por defecto en los nuevos terminales, etc., están más allá del alcance de esta respuesta. Pero si decide utilizar esa técnica, hay muchos tutoriales e información adicional en la web.


Gracias por la respuesta, sin embargo, ya he cambiado PS1 a mi gusto.
Alex Ng
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.