Я думаю, что нашел способ сделать это:
part1:
ssh $target_server "bash -s" < $target_script > logfile.log 2> logfile.err &
В таким образом основной сценарий завершается мгновенно, а второй сценарий запускается в фоновом режиме.
Не храните пути к используемым командам в переменных, это совершенно не нужно. Если вы используете инструменты по нестандартным -путям (, которые вы не используете ), вместо этого измените $PATH
.
Вы используете cat $check
. Два замечания по этому поводу:
$check
подвергнется разбиению поля на пробелы, превратив его в ряд слов. Затем они будут подвергаться подстановке имени файла, если они содержат символы подстановки имени файла.
Полученные слова будут переданы в 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) }'
Используйте 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