#!/bin/bash arp-scan -l
Страница руководства для arp -сканирование (1). (Если ваш компьютер имеет несколько интерфейсов,вам может потребоваться указать, сеть какого интерфейса вы хотите сканировать с помощью
-I
.)
Вы пытаетесь поместить сценарий оболочки в параметр форматирования Git. Конечно, это не сработает. 1
git filter-branch
; но они будут явно указаны как таковые на соответствующей странице руководства. То, что вы пытаетесь выполнить, на самом деле может быть выполнено не с помощью Git, а с помощью внешнего фильтра для сопоставления имен и пометки их цветами с помощью escape-последовательностей ANSI .
Например, если имя автора совпадает с «Joe Average », выделите имя и угловые скобки голубым цветом; в противном случае выделите имя и угловые скобки жирным синим цветом. 2 Остальные части текста оставьте без изменений в обоих случаях...
Реализовано с использованием Perl 5 в качестве фильтра:
git log "--pretty=tformat:%h <%an> %s" | perl -n -e '
chomp;
if(/^(.*)<([^>]*)>(.*)$/) {
if ($2 eq "Joe Average") {
print $1."\e[36m<".$2.">\e[39m".$3."\n";
} else {
print $1."\e[1m\e[34m<".$2.">\e[39m\e[0m$3\n";
}
} else {
print $_."\n";
}'
Реализовано с использованием sed
в качестве фильтра (немного хакерски 3)...
git log "--pretty=tformat:%h <%an> %s" | sed '
s/<\(Joe Average\)>/\x1B[36m<\1>\x1B[39m/g;
t matched;
s/<\([^>]*\)>/\x1B[1m\x1B[34m<\1>\x1B[39m\x1B[0m/g;
:matched'
Обычный вывод (без фильтра )из тестового репозитория:
$ git log "--pretty=tformat:%h <%an> %s"
e7f3209 <Joe Average> improving portability
e3ebe74 <Jim Sixpack> adding first working prototype
Выделенный результат (пропущен через любой из фильтров):
Обратите внимание, что эти команды фильтрации по-прежнему будут работать, даже если вы изменили формат вывода git log
, при условии, что:
<
>
. <
>
больше ничего не заключено.Другой способ сделать то, о чем вы просили, — выполнить два разных вызова git log
с разными --author
и --pretty
, объединить результаты и отсортировать их по отметке времени; но сложная часть заключается в том, чтобы убедиться, что выходные данные обоих вызовов git log
не дают перекрывающихся выходных данных. (Вы не можете использовать uniq
, так как это помечает их обоих разными escape-последовательностями)
if [ ! %an = "my own user name" ]...
уже выполнялся бы в строке USER=
(%an
будет сравниваться буквально — в шелле это не имеет особого значения )] ; сделать это эффективно USER="%C(cyan)<%an>"
еще до того, как вы успели вызвать команду git log
. \x
является расширением GNU sed , ваш пробег может отличаться, если вы используете это в системе, отличной от -GNU. [ ! %an = "my own user name" ]
всегда верно, потому что %an
никогда не будет равно вашему имени пользователя или любому другому имени пользователя в этом отношении :единственное, чему оно равно, это %an
, потому что это просто буквальная строка, насколько Баш обеспокоен. Он имеет только особое значение ("имя автора")в git .
Возможно, есть умный способ сделать то, что вы хотите, но я не могу придумать ни одного банкомата. И я не думаю, что вы можете сделать это, смешав bash и git, как вы пытаетесь сделать. Если есть такое решение, оно, скорее всего, будет крайне неуклюжим :вам в основном придется прыгать между уровнем bash и уровнем git, при этом git перебирает все коммиты, но каким-то образом сообщает bash имя автора на каждый коммит, чтобы уровень bash мог указать git, какой цвет использовать.
Если это можно сделать, я думаю, что это, вероятно, будет чистое решение git, а не смесь bash и git.
Просто ради хорошей практики:
Variables hold data. Functions hold code. Don't put code inside variables!
См. вики-шерсть