Идеально это были бы учетные записи 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
\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),"
Было бы легче использовать tput
tput setaf 1; somecommand; tput sgr0
или
tput setaf 1
somecommand
tput sgr0
Это устанавливает передний план на красный, выполнения somecommand
который затем отобразит вывод красного цвета, затем очищает цветную последовательность. Это работает, по крайней мере, с bash
, zsh
и ksh
.
Посмотрите tmux(1)
и terminfo(5)
для получения дополнительной информации о том, с чем можно сделать tput
.
Есть еще более простой способ:
Чтобы точно знать, какой байт соответствует escape-символу \033
, вот что вы можете сделать:
printf "\033" | xxd -p
И вы получите
1b
Таким образом, escape-последовательность \033 соответствует байту 0b00011011 в двоичном формате, 27 в десятичном или 1b в шестнадцатеричном.
И хорошие новости :sed знает шестнадцатеричные коды !
echo "color test" | sed 's,color,\x1b[31m&\x1b[0m,'
Это гораздо более приятное решение, когда вы знаете свой гекс.
cat |sed
слишком Спасибо! – Aquarius Power 14.06.2014, 05:29