adwing Команда SSH в скрипте Bash дает плохой вывод

Я думаю, что нашел способ сделать это:

part1:
ssh $target_server "bash -s" < $target_script > logfile.log 2> logfile.err &

В таким образом основной сценарий завершается мгновенно, а второй сценарий запускается в фоновом режиме.

0
28.12.2018, 12:48
2 ответа

Не храните пути к используемым командам в переменных, это совершенно не нужно. Если вы используете инструменты по нестандартным -путям (, которые вы не используете ), вместо этого измените $PATH.

Вы используете cat $check. Два замечания по этому поводу:

  1. $checkподвергнется разбиению поля на пробелы, превратив его в ряд слов. Затем они будут подвергаться подстановке имени файла, если они содержат символы подстановки имени файла.

  2. Полученные слова будут переданы в cat, который ожидает, что они будут именами файлов. Отсюда и ваша ошибка.

Вместо этого просто направьте sshна awkнапрямую:

ssh user@somesystem.com "/usr/local/bin/check_mq.sh" |
awk -F '=' '{ print $NF }'

Это предполагает, что вы хотите вывести число после последнего =в строке.

Если вы хотите проверить, больше ли это число, чем какая-либо переменная$x:

ssh user@somesystem.com "/usr/local/bin/check_mq.sh" |
awk -F '=' -v x="$x" '$NF > x { printf("%d is more than %d\n", $NF, x) }'
2
28.01.2020, 02:18

Используйте echoвместо cat, так как ваш $checkявляется переменной. Используйте, как показано ниже

check=$(ssh user@somesystem.com "/usr/local/bin/check_mq.sh")
ret=$?
cat=/bin/cat
awk=/usr/bin/awk
output=$(echo $check | $awk -F= '{print $4}' | $awk '{print $1}')
echo $output
0
28.01.2020, 02:18

Теги

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