Rsync создает временный названный файл .filename.$$$$
Если Ваш друг хочет загрузить при загрузке, они должны загрузить этот файл с помощью -P
расширение, как, после того как Вы закончили, файл, исчезнет, и ему, вероятно, придется возобновить загрузку с помощью корректного имени файла
Я просто протестировал это с rsync, и можно загрузить тот временный файл при загрузке его. Немного грязный, но это работает!
Это ANSI escape sequences; эта ссылка представляет собой диаграмму цветовых кодов, но есть и другие интересные вещи на этой странице Википедии. Не все из них работают (например) на обычной консоли Linux.
Это неправильно:
\033]00m\]. # white
0
сбрасывает терминал на его значение по умолчанию (которое, вероятно, белое). Реальный код для белого переднего плана - 37. Также, экранированная закрывающаяся скобка в конце (\]
) не является частью последовательности цветов (см. несколько последних параграфов ниже для объяснения их назначения при установке подсказки).
Обратите внимание, что некоторые GUI-терминалы позволяют задавать настраиваемую цветовую схему. Это повлияет на вывод.
Здесь есть список, который добавляет 7 цветов переднего плана и 7 цветов фона, которых я не видел раньше, но они, кажется, работают:
# Foreground colors
90 Dark gray
91 Light red
92 Light green
93 Light yellow
94 Light blue
95 Light magenta
96 Light cyan
# Background colors
100 Dark gray
101 Light red
102 Light green
103 Light yellow
104 Light blue
105 Light magenta
106 Light cyan
Кроме того, если у вас есть GUI-терминал с 256 цветами (я думаю, большинство из них сейчас), вы можете применить цвета из этого графика:
Последовательность ANSI для их выбора, используя номер в левом нижнем углу, начинается 38;5;
для переднего плана и 48;5;
для фона, а затем номер цвета, так что например :
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Дает мне светло-оранжевый загар (это значит, что цветовой график примерно аппроксимирован).
Вы можете видеть цвета на этом графике1, так как они довольно легко появятся на вашем терминале:
#!/bin/bash
color=16;
while [ $color -lt 245 ]; do
echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
((color++));
done
Вывод понятен сам по себе.
Некоторые системы устанавливают переменную $TERM в xterm-256color
, если вы находитесь на 256 цветном терминале через какой-то код оболочки в /etc/profile
. В других случаях вы должны иметь возможность настроить свой терминал на использование этого кода. Это позволит приложениям TUI знать, что существует 256 цветов, и позволит вам добавить что-то подобное в ваш ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Остерегайтесь, что когда вы используете цветовые экранирующие последовательности в подсказке, вы должны заключить их в экранированные (\
префиксные) квадратные скобки, как это:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Обратите внимание, что [
в цветовую последовательность не экранированы, а вот ограждающие - да. Назначение последнего - указать оболочке, что прилагаемая последовательность не засчитывается в длину символа подсказки. Если этот счет неправильный, то при прокрутке истории будут происходить странные вещи, например, если она слишком длинная, то избыточная длина последней прокрученной строки появится прикрепленной к вашей строке, и вы не сможете в нее вернуться (она игнорируется так же, как и строка prompt).
Также обратите внимание, что если вы хотите включать вывод команды, выполняемой каждый раз при использовании строки prompt (в отличие от всего лишь одного раза, когда строка prompt установлена), вы должны установить ее как буквальную строку с одиночными кавычками, e. g.:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Хотя это не лучший пример, если вы довольны использованием специальных \d
или \D{формата}
escapes -- которые не являются темой вопроса, но могут быть найдены в man bash
в разделе PROMPTING
. Существуют различные другие полезные эквапсы, такие как \w
для текущей директории, \u
для текущего пользователя и т.д.
1. Основная часть этой диаграммы, цвета 16 - 231 (обратите внимание, что они не в числовом порядке) - это цветовой куб 6 x 6 x 6 RGB. Под "цветовым кубом" понимается тот факт, что цветовое пространство RGB может быть представлено с помощью трехмерного массива (с одной осью для красного, с одной - для зеленого и с одной - для синего). Каждый цвет в кубе здесь может быть представлен в виде координат в массиве 6 х 6 х 6, а индекс на графике, вычисленный таким образом:
16 + R * 36 + G * 6 + B
Первый цвет в кубе, в индексе 16 на графике, черный (RGB 0, 0, 0). Вы можете использовать эту формулу в скрипте оболочки:
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Violet
bg=$(RGBcolor 5 3 0) # Bright orange.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"
Он должен иметь правильный размер для используемого вами терминала. Для этой цели он немного переборщил, но теперь вы можете контролировать многие аспекты того, как он отображается с помощью параметров. Надеюсь, что все это само собой разумеется.[112331]
Похоже, по крайней мере, что часть списка:
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m' # Black - Background
bakred='\e[41m' # Red
bakgrn='\e[42m' # Green
bakylw='\e[43m' # Yellow
bakblu='\e[44m' # Blue
bakpur='\e[45m' # Purple
bakcyn='\e[46m' # Cyan
bakwht='\e[47m' # White
txtrst='\e[0m' # Text Reset
основана на https://wiki.archlinux.org/index.php/Color_Bash_Prompt
export PS1=\n\[\e[32;1m\](\[\e[37;1m\]\u\[\e[32;1m\])-(\[\e[37;1m\]jobs:\j\[\e[32;1m\])-(\[\e[37;1m\]\w\[\e[32;1m\])\n$ \[\e[0m\]
Я написал функцию bash, которая может показать вам все цвета, если это поможет.
function colorgrid( )
{
iter=16
while [ $iter -lt 52 ]
do
second=$[$iter+36]
third=$[$second+36]
four=$[$third+36]
five=$[$four+36]
six=$[$five+36]
seven=$[$six+36]
if [ $seven -gt 250 ];then seven=$[$seven-251]; fi
echo -en "\033[38;5;$(echo $iter)m█ "
printf "%03d" $iter
echo -en " \033[38;5;$(echo $second)m█ "
printf "%03d" $second
echo -en " \033[38;5;$(echo $third)m█ "
printf "%03d" $third
echo -en " \033[38;5;$(echo $four)m█ "
printf "%03d" $four
echo -en " \033[38;5;$(echo $five)m█ "
printf "%03d" $five
echo -en " \033[38;5;$(echo $six)m█ "
printf "%03d" $six
echo -en " \033[38;5;$(echo $seven)m█ "
printf "%03d" $seven
iter=$[$iter+1]
printf '\r\n'
done
}
Вы можете добавить ее в .bashrc / .bash_profile / .bash_aliases или сохранить как сценарий и запустить его таким образом. Вы можете использовать цвета для изменения цвета, как я сделал со своим именем ниже.
Я изменил свое имя в .bash_profile, сделав следующее:
if [ "$USER" = "plasmarob" ]; then
p="\[\033[01;38;5;52m\]p"
l="\[\033[01;38;5;124m\]l"
a="\[\033[01;38;5;196m\]a"
s="\[\033[01;38;5;202m\]s"
m="\[\033[01;38;5;208m\]m"
a2="\[\033[01;38;5;214m\]a"
r="\[\033[01;38;5;220m\]r"
o="\[\033[01;38;5;226m\]o"
b="\[\033[01;38;5;228m\]b"
local __user_and_host="$p$l$a$s$m$a2$r$o$b"
else
local __user_and_host="\[\033[01;36m\]\u"
fi
...
export PS1="$__user_and_host $__cur_location $__git_branch_color$__git_branch$__prompt_tail$__last_color "
Обратите внимание, что префикс 01 в строке типа \[\033[01;38;5;214m\]a
выделяет ее жирным шрифтом.
cat "$0" 1>&2;
#
# = 256-color test =
#
# [
# |*| Source: https://unix.stackexchange.com/a/643715
# |*| Source (original): https://misc.flogisoft.com/bash/tip_colors_and_formatting#colors2
# |*| Last update: CE 2021-05-15 03:17 UTC ]
#
#
# This script shall echo a bunch of color codes generating a fancy color table: demonstrating the 256-color compatibility of the shell / terminal.
#
#
#
#
# == Implementation ==
#
# === Table 0..15 ===
Colors="$(
# Colors (0..15):
i=0;
while
echo "$i";
[ $i -lt 15 ];
do
i=$(( $i + 1 ));
done;
)";
echo;
for x0 in \
'48' '38'; # Background / Foreground
do {
for Color in \
$Colors;
do {
printf '\e['"$x0"';5;%sm %3s ' \
"$Color" "$Color"; # [Note 1]
# 8 entries per line:
[ $(( ($Color + 1) % 8 )) -eq 0 ] && echo -e '\e[m'; # [Note 1]
};
done;
};
done;
unset Colors x0;
echo;
# === Table 16..255 ===
for Color in \
$(
# Colors (16..255):
i=16;
while
echo "$i";
[ $i -lt 255 ];
do
i=$(( $i + 1 ));
done;
);
do {
Colors="$Colors $Color";
# 6 entries per group:
[ $(( ($Color + 1) % 6 )) -eq 4 ] && {
for x0 in \
'38' '48'; # Foreground / Background
do {
for Color in \
$Colors;
do
printf '\e['"$x0"';5;%sm %3s ' \
"$Color" "$Color"; # [Note 1]
done;
echo -ne '\e[m'; # [Note 1]
};
done;
unset Colors x0;
echo;
};
};
done;
unset Color;
echo;
#
#
#
#
# == Notes ==
#
# [Note 1]
# [
# For explanation on the color code:
# |*| Coloring test utility: https://unix.stackexchange.com/a/643536 ]
#
cat "$0" 1>&2;
#
# = 256-color test (old) =
#
# [
# |*| Source: https://unix.stackexchange.com/a/643715
# |*| Source (original): https://misc.flogisoft.com/bash/tip_colors_and_formatting#colors2
# |*| Last update: CE 2021-05-15 03:17 UTC ]
#
#
# Basically a replicate of the original with no logic change. Left there mostly for reference.
#
#
#
#
# == Implementation ==
#
# Colors (0..255):
Colors="$(
i=0;
while
echo "$i";
[ $i -lt 255 ];
do
i=$(( $i + 1 ));
done;
)";
echo;
for x0 in \
'38' '48'; # Foreground / Background
do {
for Color in \
$Colors;
do {
printf '\e['"$x0"';5;%sm %3s ' \
"$Color" "$Color";
# 6 entries per line:
[ $(( ($Color + 1) % 6 )) -eq 4 ] && echo -e '\e[m';
};
done;
echo;
};
done;
unset Colors x0 Color;
Вы можете использовать ответы @goldilocks и @Michael Durrant, чтобы создать что-то более читабельное, подобное этому:
CYAN="\[\e[01;36m\]"
WHITE="\[\e[01;37m\]"
BLUE="\[\e[01;34m\]"
TEXT_RESET="\[\e[00m\]"
TIME="\t"
CURRENT_PATH="\W"
ROOT_OR_NOT="\$"
export PS1="${CYAN}[${BLUE}${TIME}${WHITE} ${CURRENT_PATH}${CYAN}]${ROOT_OR_NOT}${TEXT_RESET} "
Что приведет к: