Буфер обмена является ничем специальным и просто деталью реализации для некоторых программ, например. X
, Emacs, Vim и другие программы имеют реализации, что Вы могли назвать "буферами обмена".
Поскольку Вы говорите о сервере, я предполагаю, что Ваши пользователи входят в систему в систему через ssh
. Это означает, что нет никакого буфера обмена для этих пользователей. Это обрабатывается их хост-системой и terminal
.
Если Вы хотите получить доступ X
буфер обмена там является несколькими решениями, например:
Если Вы хотите получить доступ X
содержание буфера обмена для другого пользователя, необходимо получить доступ X
сессия для этого пользователя.
Существует много других вещей, которые можно изучить, например, autocutsel, интеграция между X буферами обмена и Emacs, и т.д.
Вот другой подход. У меня есть немного сценария Perl, который я уже отправил в другом ответе, который выделит пользователя, предоставленного шаблонам в различных цветах. Немного измененная версия сценария будет действовать как grep
:
#!/usr/bin/env perl
use Getopt::Std;
use strict;
use Term::ANSIColor;
my %opts;
getopts('hic:l:',\%opts);
if ($opts{h}){
print<<EoF;
Use -l to specify the pattern(s) to highlight. To specify more than one
pattern use commas.
-l : A Perl regular expression to be colored. Multiple expressions can be
passed as comma separated values: -l foo,bar,baz
-i : makes the search case sensitive
-c : comma separated list of colors;
EoF
exit(0);
}
my $case_sensitive=$opts{i}||undef;
my @color=('bold red','bold blue', 'bold yellow', 'bold green',
'bold magenta', 'bold cyan', 'yellow on_blue',
'bright_white on_yellow', 'bright_yellow on_red', 'white on_black');
if ($opts{c}) {
@color=split(/,/,$opts{c});
}
my @patterns;
if($opts{l}){
@patterns=split(/,/,$opts{l});
}
else{
$patterns[0]='\*';
}
# Setting $| to non-zero forces a flush right away and after
# every write or print on the currently selected output channel.
$|=1;
while (my $line=<>)
{
my $want=0;
for (my $c=0; $c<=$#patterns; $c++){
if($case_sensitive){
if($line=~/$patterns[$c]/){
$line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ge;
$want++;
}
}
else{
if($line=~/$patterns[$c]/i){
$line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ige;
$want++;
}
}
}
print STDOUT $line if $want>0;
}
Если Вы сохраняете тот сценарий как cgrep
где-нибудь в Вашем PATH
и сделайте это исполняемым файлом, можно указать до 10 различных шаблонов, каждый из которых будет распечатан в различном цвете:
$ cgrep -h
Use -l to specify the pattern(s) to highlight. To specify more than one
pattern use commas.
-l : A Perl regular expression to be colored. Multiple expressions can be
passed as comma separated values: -l foo,bar,baz
-i : makes the search case sensitive
-c : comma separated list of colors;
Каждый вызов grep
в выполнениях канала в отдельной оболочке, таким образом, необходимо будет передать некоторое состояние между ними. Следующим решением является сырой способ обработать это с файлом, который сохраняет индекс цвета и файл блокировки, который гарантирует, чтобы одновременные вызовы не читали то же значение:
#!/usr/bin/env bash
color_index_file=~/.gitcolor
color_index_lock_file=/tmp/$(basename $0)
colors=()
for index in {31..34}
do
colors+=("01;$index")
done
until mkdir "$color_index_lock_file" 2>/dev/null
do
:
done
color_index=$(($(cat "$color_index_file" || echo 0) + 1))
if [[ $color_index -ge ${#colors[@]} ]]
then
color_index=0
fi
printf "$color_index" > "$color_index_file"
rmdir "$color_index_lock_file"
GREP_COLORS="mt=01;${colors[$color_index]}" grep --color=always "$@"
Тест, принимающий, Вы назвали свою копию cgrep
и поставленный это Ваш PATH
:
echo foobarbaz | cgrep foo | cgrep bar | cgrep baz
COLOR_INDEX
и GREP_COLORS
. Я пытался экспортировать их в конце функции без успеха. Это то, что Вы имели в виду? Просто иметь export VAR
, право?
– Lix
09.12.2013, 14:47
grep "$@"
предложение - который разобрался в псевдониме для выполнения функции и затем grep.
– Lix
10.12.2013, 01:01
Если Вы хороши с регулярными выражениями, можно хотеть проверить grc, и grcat. grc называет grcat.
grcat использует конфигурационные файлы, где можно добавить регулярные выражения для соответствия тексту, который будет отображен в каждом цвете. Это также имеет много других опций. Это принимает значение по умолчанию к системным файлам журнала колоризации.
В зависимости от того, что Вы имеете в виду для своего заключительного сценария, Вы можете к colorize свой вывод со всего одной командой.
Прием указывает regexes правильно для каждого "поля" в Вашем источнике данных. Это будет намного легче, если Ваши данные будут относительно универсальны в структуре.
В прошлый раз, когда я попробовал его, я не стал слишком далеким, но я могу сделать, чтобы другие пошли в нем, потому что я немного лучше в regexes, чем я был затем.
Существует также команда tput, которая может использоваться для отправки информации (как цветные изменения) непосредственно к оконечному устройству.
Оба подхода охвачены сообщением ниже. Это говорит о команде находки, но это может быть применено к выводу любой команды.