Команда bash stdout

Я пытаюсь чтобы получить версию программного обеспечения с помощью сценария bash. Команда проста:

/usr/local/sbin/keepalived -v

Это результат:

Keepalived v2.0.13 (18.02.2019), git commit v2.0.12-53-ga9ed1993 +

Copyright (C) 2001-2019 Alexandre Cassen,

Создано с использованием заголовков ядра для Linux 3.10.0 Работает в Linux 3.10.0-957.5.1.el7.x86_64 # 1 SMP Пт, 1 февраля, 14:54:57 UTC 2019

Параметры конфигурации: NFTABLES LVS VRRP VRRP_AUTH OLD_CHKSUM_COMPAT FIB_ROUTING SNMP_V3_FOR_V2 SNMP_VRRP SNMP_CHECKER SNMP_RFCV2 SNMP_RFCV3 FILE_LOGGING LOG_FILE_APPEND EINTR_CHECK

Системные параметры: PIPE2 SIGNALFD INOTIFY_INIT1 VSYSLOG EPOLL_CREATE1 IPV6_ADVANCED_API LIBNL3 RTA_ENCAP RTA_EXPIRES RTA_PREF FRA_TUN_ID RTAX_CC_ALGO RTAX_QUICKACK FRA_OIFNAME IFA_FLAGS IP_MULTICAST_ALL NET_LINUX_IF_H_COLLISION LIBIPTC_LINUX_NET_IF_H_COLLISION LIBIPVS_NETLINK VRRP_VMAC CN_PROC SOCK_NONBLOCK SOCK_CLOEXEC O_PATH GLOB_BRACE INET6_ADDR_GEN_MODE SO_MARK SCHED_RT SCHED_RESET_ON_FORK

Из этого вывода мне нужна только первая строка:

Keepalived v2.0.13 (18.02.2019), git commit v2.0.12-53-ga9ed1993 Я пробовал + [12 следующих методов] , но ни один из них у меня не работает:

$ /usr/local/sbin/keepalived -v | head -n 1
$ echo "$(/usr/local/sbin/keepalived -v)" | head -n 1

В обоих случаях я получаю полный вывод, а не только первую строку.

Я попытался отправить стандартный вывод в файл:

$ /usr/local/sbin/keepalived -v > /tmp/keepalived.txt
$ echo $(/usr/local/sbin/keepalived -v) > /tmp/keepalived.txt
$ /usr/local/sbin/keepalived -v | tee /tmp/keepalived.txt

Но я получаю пустой файл.

Может кто-нибудь объяснить, почему это происходит и как я могу получить только первую строку?

0
задан 8 March 2019 в 01:04
1 ответ

Это происходит потому, что вывод / usr / local / sbin / keepalived -v направляется на stderr вместо stdout.

Вы может перенаправить вывод на стандартный вывод перед извлечением нужных данных, выполнив keepalived -v 2> & 1 | head -n 1

1
ответ дан 4 December 2019 в 15:44

Теги

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