如何捕获提示用户确认的 bash 命令的输出,而不阻塞输出或命令

How to capture the output of a bash command which prompts for a user's confirmation without blocking the output nor the command

我需要捕获 bash 命令的输出,该命令提示用户确认而不改变其流程。

我只知道两种捕获命令输出的方法:

- output=$(command)
- command > file

在这两种情况下,整个过程都被阻塞,没有任何输出。

例如,没有 --assume-yes:

output=$(apt purge 2>&1 some_package)

我无法打印回输出,因为命令尚未完成。

有什么建议吗?

编辑 1:用户必须能够回答提示。

编辑 2:我使用 dash-o 的回答来完成 bash script 允许用户 remove/purge 来自任何 Debian/Ubuntu 发行版的所有过时软件包(没有安装候选)。

要捕获正在等待提示的部分输出,可以在临时文件上使用尾部,如果需要,可以使用 'tee' 来保持输出流畅。这种方法的缺点是 stderr 需要与 stdout 绑定,因此很难区分两者(如果这是一个问题)

#! /bin/bash

log=/path/to/log-file
echo > $log
(
  while ! grep -q -F 'continue?' $log ; do sleep 2 ; done ; 
  output=$(<$log) 
  echo do-something "$output"
) &
# Run command with output to terminal
apt purge 2>&1 some_package | tee -a $log

# If output to terminal not needed, replace above command with
apt purge 2>&1 some_package > $log

没有通用的方法来判断(通过脚本)程序何时提示输入。上面的代码查找提示字符串 ('continue?'),因此必须根据命令对其进行自定义。