Можно ли избежать этой подоболочки в сценарии POSIX sh? - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь понять, как, если даже это можно сделать, я могу избежать подоболочки?

Это единственный способ написать код или есть другой способ?

Я пытался использовать фигурные скобки { ... }, но он не пройдет проверку оболочки и не запустится.

is_running_interactively ()
# test if file descriptor 0 = standard input is connected to the terminal
{
    [ -t 0 ]
}

is_tput_available ()
# check if tput coloring is available
{
    command -v tput > /dev/null 2>&1 &&
    tput bold > /dev/null 2>&1 &&
    tput setaf 1 > /dev/null 2>&1
}

some_other_function ()
# so far unfinished function
{
    # is this a subshell? if so, can I avoid it somehow?
    ( is_running_interactively && is_tput_available ) || # <-- HERE
    {
        printf '%b' "${2}"
        return
    }
    ...
}

1 Ответ

2 голосов
/ 28 апреля 2019

Это составной список , и да, эти команды выполняются в подоболочке.Чтобы избежать этого, используйте фигурные скобки вместо скобок:

{ is_running_interactively && is_tput_available; } || ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...