Обычной практикой является сохранение 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 ).
Для компиляторов использование категории в сообщении упрощает обнаружение фатальных ошибок (которые не могут быть немедленно фатальными ) и предупреждений. Если ваша программа завершается с ошибкой, это мало что говорит о том, что некоторые из них действительно являются предупреждениями, а некоторые - ошибками. Но когда он ведет себя иначе (или продолжает работать более или менее), категория помогает диагностировать возникшую проблему.
Ранее на этот вопрос был дан ответ в вопросе.
однако то, что вы, вероятно, захотите сделать, будет примерно следующим.
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 доллар
Наконец-то путем проб и ошибок мы нашли решение.
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
Здесь мы передаем переменные 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