Як вставити вкладки перед вихідними рядками із виконаної команди


16

Просто швидке запитання. Чи можна вкладати вихід на Ubuntu 16.04 LTS? Я створив два зображення нижче, щоб спробувати проілюструвати, що я маю на увазі під цим.

img1

img2


1
Було б добре, якщо вам доведеться передавати команду виводу через іншу команду, наприклад, YOUR COMMAND | indentабо якщо вам доведеться набрати перед нею іншу команду (навіть це може бути лише підкреслення), як _ YOUR COMMAND?
— Байт командир

1
@ByteCommander Я вважав це, однак я роблю це для зручності використання та для полегшення читання вихідних консолей. Тож я не думаю, що складання всіх моїх команд є рішенням. Дякую за відповідь та редагуйте, хоча!
— Алекс Нг

1
[Будь ласка, не публікуйте знімки з тексту тексту. ] ( meta.askubuntu.com/q/8713/85695 )
— terdon

Відповіді:


15

Ви можете зробити щось подібне - з дескрипторами файлів:

  1. збережіть дескриптор поточного виводу, щоб ми могли його відновити пізніше

    exec 3>&1
  2. перенаправити вихідний потік на підстановку процесу, яка вставляє вкладку - наприклад

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

З цього моменту будь-який процес, який записує до стандартного виводу, отримає такий результат "відфільтрований" через pasteкоманду для вставки вкладки на початку.

  1. Після закінчення роботи можна відновити нормальну поведінку, відновивши збережений дескриптор файлів і закривши тимчасовий

    exec 1>&3 3>&-

Хочу подякувати за відповідь. Це найближче до мене рішення, хоча воно не є ідеальним.
— Алекс Нг

@AlexNg дякую за нагороду - яким чином конкретно це не робить те, про що ви просили? якщо ви дасте мені знати, я спробую покращити його
— steeldriver

Щоб навести кілька прикладів: Після введення ваших команд деякі команди виконують роботу за призначенням, такі як "php -v", "ім'я хоста" та інші. Однак при використанні команди, такої як "echo Hello World", вихід відображається в рядку з входом, і це також негативно впливає на зовнішній вигляд входу при введенні наступної команди. Деякі інші команди також не впливають на процес вкладки, наприклад, при введенні недійсної команди, наприклад "asdasd".
— Alex Ng

Нарешті, він неправильно відображає зміни, що змінюються (не впевнений, як це правильно описати, вибачте). Наприклад, якщо використовується команда "apt-get update", є помітні відмінності при порівнянні її з консоллю без вкладки.
— Alex Ng

Проблема полягає в тому, що цей підхід обробляє лише STDOUT (потік 1), але не STDERR (потік 2). Він також порушує вихід програм, які використовують lessабо подібні інструменти, щоб дозволити прокручування результатів, наприклад, наприклад man.
— Байт-командир

9

Я розумію, що ця відповідь не є оптимальною для вас, але ви можете зробити функцію Bash з простою назвою _(або ще будь-яким іншим, яке ще не використовується), яке виконує команду, яку вона отримує, як аргументи та відступ усього її результату на вкладці.

Приклад:

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

Код цієї функції був би лише таким:

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

Ви можете додати його до свого ~/.bashrcфайлу, щоб він був доступний у всіх сесіях Bash вашого користувача, виконавши:

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

Якщо ви хочете зробити його доступним для всіх користувачів, додайте його /etc/bash.bashrcзамість нього (потрібні права адміністратора):

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

Крім того, ви можете також створити файл сценарію, як /usr/local/bin/_із наведеним нижче вмістом, щоб досягти того ж без функцій Bash та для всіх користувачів:

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

Ви повинні зробити сценарій виконуваним після збереження файлу за допомогою

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

5

З echoконкретно, ви можете мати його інтерпретувати як зворотний слеш \t(а табулятори ) з -eперемикачем:

echo -e "\tHello World"

Але навряд чи можливо (можливо, можливо) змінити вихідний результат кожної команди таким чином. Якщо легкість читання є вашою метою, ви, можливо, захочете вивчити налаштування вигляду (наприклад, забарвлення) вашого командного рядка, як показано тут:

Ви можете налаштувати своє запит, змінивши вміст змінної середовища PS1. Ви можете побачити невеликий приклад того, як це зробити у публікації блогу, з якого зроблено знімок екрана. Як детально використовувати ці так звані послідовності відходу ANSI, як використовувати зручніші інструменти, як зміни, застосовані за замовчуванням у нових терміналах тощо, не виходять за рамки цієї відповіді. Але якщо ви вирішили скористатися цією методикою, в Інтернеті є багато навчальних посібників та додаткової інформації.


Дякую за відповідь, однак я вже змінив PS1 на свій смак.
— Алекс Нг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.