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


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.