Определите, является ли сценарий bash фоновым или передним планом - PullRequest
0 голосов
/ 30 октября 2018

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

Фрагмент, который я неоднократно видел, приведен ниже:

function example() {
  while true; do
    case $(ps -o stat= -p $$) in
      *+*) echo "Running in foreground" ;; # this works at first, but after `bg` and then `fg` no longer works (why?)
      *) echo "Running in background" ;; ## this works
    esac
    sleep 0.25
  done
}

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

Running in foreground
Running in foreground
^Z[1]  + 82818 suspended  example
$ fg
[1]  + 82818 continued  example
Running in background
Running in background

Есть ли другой способ определить, находится ли приложение на переднем или заднем плане?

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