Command Command Server Вывод на следующую строку

Я (почти) всегда цитирую все как "эхо", поэтому я бы сделал следующее, например:

#!/bin/bash
echo "./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &"
./yowsup/yowsup-cli demos --s $1 "$2" -c yowsup/config &

Разница с решением @muru в том, что там исходная команда echo запускается «в фоновом режиме» - здесь она выводится на экран на переднем плане, но запускается как фоновая команда. (@ muru также не показывает амперсанд в конце команды.)

0
25.01.2019, 18:05
2 ответа

Я не уверен на 100 %, о чем вы спрашиваете, но, похоже, вам подойдет следующее:

# What you get
$ uname; date
Linux
Fri 25 Jan 13:09:13 GMT 2019

# What you want
$ echo "$(uname), $(date)"
Linux, Fri 25 Jan 13:09:42 GMT 2019

Таким образом, ваша команда будет:

pssh -h /tmp/hosts -i 'echo "$(uname), $(date)"'

(обратите внимание на использование одинарных кавычек -это важно, чтобы ваша локальная оболочка не расширяла подоболочки процесса)

Это делает то, что он запускает unameи dateкак подоболочку и возвращает результат как переменную, которая вбрасывается в команду echo. Как описано выше:

echo "$(uname), $(date)"
# expands as
echo Linux, Fri 25 Jan 13:10:57 GMT 2019

Кстати, я не очень хорошо знаком с pssh. Я предполагаю, что он просто запускает любой $SHELL, который ваш пользователь определил на удаленных серверах /etc/groupфайл (или любой другой ваш общий сервер аутентификации ). В противном случае описанный выше прием может не сработать. Однако я бы порекомендовал поискать другую систему для управления вашим парком серверов. например, Ansible может подойти вам, учитывая вашу склонность к использованию SSH.


редактировать :Хорошо, теперь я понимаю некоторые дополнительные требования.

Если вам нужна только первая строка сбоя, вы можете получить ее с помощью grep:

pssh -h /tmp/hosts -i 'echo "$(uname), $(date)"' | grep -Eo '\[(SUCCESS|FAILURE)\].*$'

(-Eпредназначен для расширенной поддержки регулярных выражений, поэтому вы можете использовать (SUCCESS|FAILURE). -oвернет только соответствующий шаблон, а не всю строку.

Если вам действительно нужна запятая, вы можете добавить ее вsed:

pssh -h /tmp/hosts -i 'echo "$(uname), $(date)"' | egrep -o '\[(SUCCESS|FAILURE)\].*$' | sed -r 's:(\[(SUCCESS|FAILURE)\]):\1,:'

(Я использовал символ :в приведенном выше примере sed, потому что я думаю, что он более удобочитаем, чтобы вы могли видеть, что он делает.Однако вы можете заменить его более типичным символом /, если хотите )

.

Это ищет [SUCCESS]или [FAILURE], а затем возвращает эту строку (через \1обратную ссылку )плюс запятую.

Пример:

$ echo -e "sdfsdfsdf[FAILURE] $(uname), $(date)\nsdfsdf\nasdfsdf" | grep -Eo '\[(SUCCESS|FAILURE)\].*$' | sed -r 's:(\[(SUCCESS|FAILURE)\]):\1,:'
[FAILURE], Linux, Fri 25 Jan 16:15:03 GMT 2019

Если по какой-либо причине вы можете вернуть что-то отличное от [SUCCESS]и [FAILURE], тогда код может (по иронии судьбы )быть сокращен на[A-Z]+:

pssh -h /tmp/hosts -i 'echo "$(uname), $(date)"' | egrep -o '\[[A-Z]+\].*$' | sed -r 's:(\[[A-Z]+\]):\1,:'

Но я предлагаю вам пока придерживаться версии (SUCCESS|FAILURE)на тот случай, если [A-Z]+выдаст несколько ложных срабатываний.

0
28.01.2020, 04:03

Благодаря @Imorg вы можете использовать:

pssh -h /tmp/hosts -i "uname;date"  | grep -o \[[A-Z][A-Z][A-Z]*\].* | sed -Ee 's/(^\[FAILURE\]) (SERVER[0-9]*) (.*)/\1, \2, \3/g' -Ee 's/(^\[SUCCESS\]) (.*)/\1, \2,'"$(uname)"','"$(date)"'/g'

Итак, grep -o \[[A-Z][A-Z][A-Z]*\].*выдаст результат как:

[FAILURE] SERVER1 Exited with error code 255
[SUCCESS] SERVER2
[SUCCESS] SERVER3
[SUCCESS] SERVER4
[SUCCESS] SERVER5
[SUCCESS] SERVER6

И sed -Ee 's/(^\[FAILURE\]) (SERVER[0-9]*) (.*)/\1, \2, \3/g', between strings containingНЕИСПРАВНОСТЬ `и СЕРВЕР и между EXITED.

И sed -Ee 's/(^\[SUCCESS\]) (.*)/\1, \2,'"$(uname)"','"$(date)"'/g'добавит ,между первыми двумя словами и добавит ,output of uname command, output of date command.

Итоговый вывод будет выглядеть так::

[FAILURE], SERVER1, Exited with error code 255
[SUCCESS], SERVER2,Linux,Fri Jan 25 19:27:30 UTC 2019
[SUCCESS], SERVER3,Linux,Fri Jan 25 19:27:30 UTC 2019
[SUCCESS], SERVER4,Linux,Fri Jan 25 19:27:30 UTC 2019
[SUCCESS], SERVER5,Linux,Fri Jan 25 19:27:30 UTC 2019
[SUCCESS], SERVER6,Linux,Fri Jan 25 19:27:30 UTC 2019
0
28.01.2020, 04:03

Теги

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