Последовательность <ESC>]0;
(, показанная как \33]0;
с помощью strace ), является escape-последовательностью для установки заголовка окна терминала. Он заканчивается символом BEL (\7
), поэтому первый write
устанавливает заголовок окна. Второй печатает фактическую подсказку. Обратите внимание, что даже если не считать escape-последовательности, они не совсем одинаковы. Подсказка окружена [..]
, а заголовок окна — нет.
Мы также можем видеть, что первая запись идет на stdout (fd 1, первый аргумент — на write()
), а второй — на stderr. Bash печатает приглашение в stderr, поэтому первая запись происходит откуда-то еще. Это где-то, вероятно, PROMPT_COMMAND
, как в сценариях запуска Debian по умолчанию для Bash. Там есть что-то подобное:
case "$TERM" in
xterm*|rxvt*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
;;
*)
;;
esac
Он устанавливает, что PROMPT_COMMAND
при работе xterm
или rxvt
, которые должны поддерживать эту управляющую последовательность.
Для этого можно использовать sed
или awk
.:
sed
:sed '1i\user: XXX ; pass:YYY' *.kkk
awk
:awk 'BEGIN{print "user: XXX ; pass:YYY"}1' *.kkk
Для редактирования файлов в -используйте опцию -i
для sed
. Для awk
это работает только с GNU awk
версии 4.1 при использовании опции -i inplace
.
Обновление :На этот вопрос уже есть ответы здесь и здесь(и, возможно, другие ).