Как передать несколько аргументов через ssh и использовать эти аргументы в сценарии ssh?

Обычной практикой является сохранение 0-го аргумента, переданного программе на C main , и использование его в качестве параметра для perror - для простых программ:

#include 
#include 

int main(int argc, char *argv[])
{
    char *foo = malloc(9999999999L);
    if (foo == 0)
        perror(argv[0]);
    return 0;
}

называют эту программу «foo», и запуск ее иллюстрирует суть:

> ./foo
./foo: Cannot allocate memory

Сложные программы могут добавлять к тексту (или использовать только имя файла без пути), но сохранение имени программы позволяет вам найти, откуда пришла некорректно работающая программа. из.

Не существует общепринятой схемы для сообщений об ошибках, но некоторые широко используемые программы (например, gcc) добавляют категорию сообщений, например «Ошибка» или «Предупреждение». Вот пример из одного из моих журналов сборки:

compiling fld_def (obj_s)
../form/fld_def.c: In function '_nc_Copy_Argument':
../form/fld_def.c:164:14: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
        res = (TypeArgument *)argp;
              ^

В этом примере gcc разделяет поля двоеточиями и добавляет категорию «предупреждение» после имени файла, номера строки, номера столбца - и перед фактическим сообщением. Но есть несколько вариантов, что усложняет анализ информации программами (такими как vi-like-emacs ).

Для компиляторов использование категории в сообщении упрощает обнаружение фатальных ошибок (которые не могут быть немедленно фатальными ) и предупреждений. Если ваша программа завершается с ошибкой, это мало что говорит о том, что некоторые из них действительно являются предупреждениями, а некоторые - ошибками. Но когда он ведет себя иначе (или продолжает работать более или менее), категория помогает диагностировать возникшую проблему.

3
20.04.2017, 08:41
3 ответа

Ранее на этот вопрос был дан ответ в вопросе.

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

sc.sh

#!/bin/bash

var1=$1
var2=$2
var3=$3

if $var1 -eq True; then
   echo "Todo1"
fi

if $var2 -eq True; then
   echo "Todo2"
fi

if $var3 -eq True; then
   echo "Todo3"
fi

затем запустите следующую команду

ssh user@remote-01 'bash -s' < test.sh true true true

на аргументы в BASH можно ссылаться по номеру $, например. 1 доллар

1
27.01.2020, 21:36

Наконец-то путем проб и ошибок мы нашли решение.

 var1="True"
 var2="False"
 var3="True"

 sshpass -p 'pswd' ssh user@remote-01 "bash -s" < /home/user/sc.sh "$var1 $var2 $var3"

И следует использовать следующим образом в sc.sh

if [ "$1" = "True" ]; then
   echo "Todo"
fi
if [ "$2" = "False" ]; then
   echo "Todo"
fi
if [ "$3" = "True" ]; then
   echo "Todo"
fi
1
27.01.2020, 21:36

Здесь мы передаем переменные var1/var2/var3 как переменные окружения в командной строке ssh, которые затем становятся доступными для кода bash на удаленном м/к.

var1="$var1" var2="$var2" var3="$var3" \
   sshpass -p 'pswd' ssh user@remote-01 "bash -s" < /home/user/sc.sh

Содержимое sc.sh будет следующим:

if [ "$var1" = True ]; then
   echo "Todo"
fi

if [ "$var2" = True ]; then
   echo "Todo"
fi

if [ "$var3" = True ]; then
   echo "Todo"
fi

..... so on
0
27.01.2020, 21:36

Теги

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