Я создаю сценарий, который я хочу вывести на стандартный вывод, только если процесс находится на переднем плане. Желаемое поведение заключается в том, что вы должны иметь возможность задавать фоновый сценарий и запускать его без засорения стандартного вывода, но при этом вы должны иметь возможность снова поставить сценарий на передний план для проверки его выполнения.
Фрагмент, который я неоднократно видел, приведен ниже:
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
Есть ли другой способ определить, находится ли приложение на переднем или заднем плане?