Есть ли что-то похожее или похожее на "pass" на питоне в программировании bash/shell?

Для тех, кто просто хочет убить процесс и ждет он умирает, но не бесконечно :

Он ждет максимум 60 секунд на каждый тип сигнала.

Предупреждение: этот ответ никоим образом не связан с перехватом сигнала уничтожения и его отправкой.

# close_app_sub GREP_STATEMENT SIGNAL DURATION_SEC
# GREP_STATEMENT must not match itself!
close_app_sub() {
    APP_PID=$(ps -x | grep "$1" | grep -oP '^\s*\K[0-9]+' --color=never)
    if [ ! -z "$APP_PID" ]; then
        echo "App is open. Trying to close app (SIGNAL $2). Max $3sec."
        kill $2 "$APP_PID"
        WAIT_LOOP=0
        while ps -p "$APP_PID" > /dev/null 2>&1; do
            sleep 1
            WAIT_LOOP=$((WAIT_LOOP+1))
            if [ "$WAIT_LOOP" = "$3" ]; then
                break
            fi
        done
    fi
    APP_PID=$(ps -x | grep "$1" | grep -oP '^\s*\K[0-9]+' --color=never)
    if [ -z "$APP_PID" ]; then return 0; else return "$APP_PID"; fi
}

close_app() {
    close_app_sub "$1" "-HUP" "60"
    close_app_sub "$1" "-TERM" "60"
    close_app_sub "$1" "-SIGINT" "60"
    close_app_sub "$1" "-KILL" "60"
    return $?
}

close_app "[f]irefox"

Он выбирает приложение для уничтожения по имени или аргументам. Сохраните скобки для первой буквы имени приложения, чтобы избежать совпадения с самой grep.

С некоторыми изменениями вы можете напрямую использовать PID или более простой pidof имя_процесса вместо оператора ps .

Детали кода: Окончательная команда grep позволяет получить PID без конечных пробелов.

0
19.10.2018, 00:24
2 ответа

На ваш заголовок полностью отвечает Строка ничего не делать в скрипте bash::или trueфактически эквивалентна pass.

Однако в этих обстоятельствах я бы перевернул условие:

if ! grep something
then
    code
fi

и

>>> for element in a:
...     if element:
...         print element
10
28.01.2020, 02:13

Это уродливый кладж, но если вы действительно хотите это сделать, вы можете использовать

usleep

Эта команда приостанавливает выполнение на 1 микросекунду.

Вы можете использовать его в функции:

function do_nothing {
   usleep
}

, а затем используйте функцию, аналогичную Python pass.

Это работает, но не очень приятно читать и нарушит логику скрипта, поэтому я не рекомендую его использовать. Гораздо лучшее решение - вместо этого переписать сценарий, как предложил @StephenKitt.

1
28.01.2020, 02:13

Теги

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