Получить аргументы файла из функции, вызываемой с аргументами

Поскольку я не смог понять, как обнаружить зависание с помощью имеющегося у меня оборудования, я создал программное -решение под названием HUPMon , написанное на C. In определяет, находится ли терминал в сети, отправляя сообщение о положении курсора (последовательность CPR )на терминал и ожидание ответа. Если ответ не получен, предполагается, что терминал находится в автономном режиме. Репозиторий включает скрипт и системный модуль, который можно использовать вместо agetty (8 ), который делает что-то похожее на этот скрипт:

stty 19200 sane -brkint ixoff -imaxbel

while :; do
    if [ "$(hupmon -1)" = "DEVICE_ONLINE" ]; then
        stty 19200 sane -brkint ixoff -imaxbel
        printf "\033[r\033[H\033[J" # Clear the screen.
        TERM="vt100" hupmon /bin/login
    fi

    sleep 1
done

2
09.04.2021, 23:21
2 ответа

Просто передайте их функции:

myFunc func-arg-2 func-arg-1 "$@"
1
28.04.2021, 22:53

Внутри функции, в sh, позиционные параметры ($1, $2..., $@,$*)являются параметрами самой функции,позиционные параметры скрипта (или родительской функции, если они вызываются из другой функции ), становятся недоступными.

Таким образом, вам нужно передать эти аргументы в функцию каким-то другим способом.

Не помогает то, что shне поддерживает переменные-массивы, что затрудняет хранение произвольного списка строк.

Помимо решений, уже предложенных другими, вы можете:

#! /bin/sh -

myFunc() {
  n="$(( $# - $1 - 1 ))" i=0; shift
  for arg do
    case "$i" in
      ("$n") break;;
      (0) shift "$n";; # on first pass, remove the function arguments from "$@"
    esac
    i="$(( i + 1 ))"
    #... do something with every "$arg" passed to myFunc and with "$@"
  done
}

И зовите myFuncкак:

myFunc "$#" args for myFunc "$@"
3
28.04.2021, 22:53

Теги

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