Вы можете принять решение на основе вывода службы rtvscand status
:
[ "$(service rtvscand status)" = 'rtvscand is running' ] && do_what_you_want
Это означает, что если вывод rtvscand работает
, то это rtvscand is running
тогда мы сделаем кое-что, иначе нет.
Таким образом, ваш сценарий может иметь вид:
while IFS= read -r name; do
ssh root@"$name" '[ "$(service rtvscand status)" = "rtvscand is running" ] && \
{ uname -n; cat /opt/Symantec/virusdefs/definfo.dat ;}'
done <list.txt
echo
отличается от стандартных escape-последовательностей C, поддерживаемых printf
/ awk
/ $'...'
...
В стандартном синтаксисе echo
вам нужен начальный 0
перед восьмеричной последовательностью (, которая может содержать от 1 до 3 цифр )¹:
echo '\0360\0237\0246\0204'
Обратите внимание: чтобы встроенная функция bash
echo
работала с этим, необходимо включить параметр xpg_echo
²:
$ UNICORN_utf8_printf_format='\360\237\246\204'
$ UNICORN_utf8_echo='\0360\0237\0246\0204'
$ UNICORN_utf8=$'\360\237\246\204'
$ printf "$UNICORN_utf8_printf_format\n"
$ printf '%s\n' "$UNICORN_utf8"
$ shopt -s xpg_echo
$ echo "$UNICORN_utf8_echo"
Выше только $UNICORN_utf8
содержит символ, закодированный в UTF8. Другие содержат последовательности обратной косой черты и цифр, которые должны быть расширены соответствующими инструментами.
Формат %b
утилиты printf
также понимает те же последовательности, что и echo
. %b
был фактически добавлен, чтобы мы могли избавиться от echo
, который невозможно использовать портативно и надежно .
$ printf '%b\n' "$UNICORN_utf8_echo"
См. также (в zsh
и bash
³):
UNICORN_locale_encoding=$'\U1f984'
Что дает вам Единорога, закодированного в кодировке локали, что заставит его работать, даже если кодировка локали не была UTF -8, а также имел этот символ (, вероятно, только GB18030, где кодируется как $'\225\60\330\66'
и где $'\360\237\246\204'
будет кодировкой馃
(\N{CJK UNIFIED IDEOGRAPH-9983}\N{<private use area-E6E9>}
)).
Некоторые printf
реализации (, включая GNU printf
и printf
, встроенные в zsh
, ksh93
и последние версииbash
(4.2 или выше )), также поддерживают эти \UXXXXXXXX
escape-последовательности. последовательности в их аргументе формата (или аргументы для %b
, за исключением ksh93 ); GNU нужно 8 цифр.
¹ GNU coreutils echo
и busybox echo
поддерживают \ooo
с -e
в качестве расширения (, но не тогда, когда POSIXLY_CORRECT
находится в среде для GNUecho
)
² другим вариантом может быть использование нестандартной -опции -e
, но тогда она не будет работать, когда включены обе опции posix
и xpg_echo
, например, когда bash
в UNIX режим соответствия.
³ ksh93 и mksh также поддерживают этот синтаксис, но кодируются в UTF -8 независимо от кодировки локали; в текущих (2018 )версиях FreeBSD sh
вам нужно \U0001f984
, и это работает только в UTF -8 локалях.
$ echo $'\360\237\230\200\012'
(это bash
echo
, GNU bash, версия 4.3.43 (1 )-выпуск (x86 _64 -redhat -linux -gnu))
Или вы можете использовать двоичный файл echo
:
$ /usr/bin/echo -e "\360\237\230\200\012"
Откуда я это взял? Я использовал ответ maulinglawns выше, чтобы увидеть восьмеричный смайлик:
$ printf "\U1F600\n"
$ printf "\U1F600\n"|hexdump -b
0000000 360 237 230 200 012
0000005
hexdump
:-b, --one-byte-octal one-byte octal display
РЕДАКТИРОВАТЬ:Если вам нужен смайлик единорога:
$ echo $'\360\237\246\204'
$ `which echo` -e '\360\237\246\204'
Если вам нужен общий способ получения восьмеричного числа в этом формате:
printf "\U1F600\n"|hexdump -v -e '"\\" 1/1 "%03o"' ; echo
\360\237\230\200\012
Выходные данные включают \n
как \012
. «;echo» добавит новую строку в конце, это полезно при попытке выполнить это в командной строке, иначе приглашение оболочки будет отображаться сразу после вывода.