Используя sed для окраски вывода от команды на solaris

Идеально это были бы учетные записи SFTP, с помощью аутентификации открытого ключа SSH, а не паролей. Вы получили бы и безопасность и удобство. Но давайте предположим, что у Вас нет выбора не использования FTP с паролями.

Вы могли сохранить пароли ( .netrc файл) в зашифрованной файловой системе и монтируют, что файловая система только, когда Вы хотите получить доступ к нему. Простым способом создать зашифрованное дерево каталогов является encfs. Установка:

# install encfs, e.g. apt-get install encfs
mkdir ~/.passwords.d
encfs ~/.passwords.encfs ~/.passwords.d
mv ~/.netrc ~/.passwords.d
ln -s .passwords.d/.netrc ~
fusermount -u ~/.passwords.d

Ежедневное использование:

encfs ~/.passwords.encfs ~/.passwords.d
ftp …
fusermount -u ~/.passwords.d

30
15.12.2015, 03:53
3 ответа

\xNN escape-последовательность в GNU sed, но это не стандартно, и в особенности это не доступно на Солярисе.

Можно включать литеральный символ ESC в сценарий, но это мешало бы читать и редактировать.

Можно использовать printf генерировать символ ESC. Это понимает восьмеричные Escape, не шестнадцатеричные.

esc=$(printf '\033')
echo "test" | sed "s,.*,${esc}[31m&${esc}[0m,"

Можно звонить tput генерировать текст замены в вызове к sed. Эта команда ищет escape-последовательности в terminfo базе данных. В теории, с помощью tput делает Ваш сценарий более портативным, но на практике Вы вряд ли встретитесь с терминалом, который не использует управляющие коды ANSI.

echo "test" | sed "s,.*,$(tput setaf 1)&$(tput sgr0),"
38
27.01.2020, 19:38
  • 1
    , который это работает отлично к colorize на a cat |sed слишком Спасибо! –  Aquarius Power 14.06.2014, 05:29

Было бы легче использовать tput

tput setaf 1; somecommand; tput sgr0

или

tput setaf 1
somecommand
tput sgr0

Это устанавливает передний план на красный, выполнения somecommand который затем отобразит вывод красного цвета, затем очищает цветную последовательность. Это работает, по крайней мере, с bash, zsh и ksh.

Посмотрите tmux(1) и terminfo(5) для получения дополнительной информации о том, с чем можно сделать tput.

8
27.01.2020, 19:38
  • 1
    благодарит за ответ. Как я сказал ранее, я не могу изменить команду эха. 'эхо' является просто заместителем для процесса, который я называю, который я не могу изменить. Действительно ли возможно использовать sed с tput так или иначе? Кроме того, когда я выполняю ту команду на sunOS 5.10, я не вижу цветов. –  acm 20.08.2012, 22:52
  • 2
    я обновил его для разбивания его на отдельные команды. –  bahamat 20.08.2012, 22:55
  • 3
    Это лучше, чем моя текущая реализация, в которой это не печатает необработанные коды ASCII на solaris. Однако (по любой причине), это не окрашивает вывод 'somecommand' на solaris. Это делает на Linux. Я принял ответ @Gilles, который делает обоих.Спасибо. –  acm 21.08.2012, 19:16

Есть еще более простой способ:

Чтобы точно знать, какой байт соответствует escape-символу \033, вот что вы можете сделать:

printf "\033" | xxd -p

И вы получите

1b

Таким образом, escape-последовательность \033 соответствует байту 0b00011011 в двоичном формате, 27 в десятичном или 1b в шестнадцатеричном.

И хорошие новости :sed знает шестнадцатеричные коды !

echo "color test" | sed 's,color,\x1b[31m&\x1b[0m,'

Это гораздо более приятное решение, когда вы знаете свой гекс.

1
25.06.2021, 20:04

Теги

Похожие вопросы