Можно ли добавить пустую строку до и после вывода команды, но только если команда ничего не выводила? - PullRequest
0 голосов
/ 02 декабря 2018

Просто для краткого примера:

~$ cd ~/Documents/
~$ ls

a file   another file

~$ echo “Ok”

Ok

~$ rm *
~$ ls
~$ cd

Это вдохновлено этим вопросом , где trap 'echo' DEBUG используется для добавления пустой строки до и после вывода каждогокоманда.К сожалению, пустые строки все еще добавляются, если команда не имеет вывода.Другим недостатком trap 'echo' DEBUG является то, что он немного «хакерский», и я слышал, что он ломает некоторые программы.Он также добавляет пустые строки между выводом команд в конвейере.

Теперь я понимаю, что может быть невозможно добавить пустую строку перед выводом команды, потому что, чтобы проверить, есть ли у командывывод, вывод должен быть сначала напечатан на экране, а затем вы не можете добавить пустую строку!Из-за этого было бы также хорошо, если бы между каждой подсказкой была пустая строка при запуске команды без вывода, только не то, что есть две строки, как с trap 'echo' DEBUG.

ПричинаЯ делаю это, мне часто бывает трудно найти подсказку в море выходных данных, особенно когда это разноцветная разница.Я пробовал двухстрочные подсказки, иногда с пустыми строками, а также добавлял в свою подсказку отвратительный беспорядок цветов.Ни один не был вполне удовлетворительным.

Спасибо за помощь!

1 Ответ

0 голосов
/ 02 декабря 2018

Вы можете просто сделать:

echo ""

Хотя для форматированных выходных данных, заканчивающихся новой строкой, printf является лучшим выбором, например: printf "%s\n\n" "output"

Я думаю, что следующий потокв вашей теме, для пустых строк: Каков предпочтительный метод для отображения пустой строки в сценарии оболочки?

Что касается управления выводом, попробуйте поместить выполнение команды в переменную изатем оцените, как вы хотите.
Например, с помощью ls и если:

list=$(ls | wc -l)
if [ "$list" -gt 0 ]
then
        echo "Working fine"
else
        echo ""
fi

Вы все равно можете распечатать вывод команды, если вам нужно.Но я думаю, что в этом нет необходимости, если нет какой-либо отчетности.Например, чтобы напечатать выходные данные в обоих случаях:

Добавьте следующее к обоим, когда условие выполнено, а когда нет (повторное выполнение команды):

echo "$(ls)"

Например,изменение условия для его невыполнения дает желаемый результат:

adama@galactica:~$ ./processing.sh

a
column2.txt
pepito
processing.sh
test.txt

С наилучшими пожеланиями

...