我试图在脚本中缩进“子命令”的输出,如下所示:
Turning off image...
Unmounting...done.
Detaching loop device...done
其中缩进的项目是 期间执行的各个步骤Turning off image...
。
标准解决方案是使用sed
et。等人。像这个问题但是,我的脚本中的某些步骤需要提示用户使用 确认操作read
。由于提示符不是以换行符终止,因此sed
直到命令完成后才会输出read
。有没有解决的办法?
澄清:子命令之一本身正在read
使用提示进行调用。当子命令通过管道传递时sed
,sed
不会输出提示,因为它尚未以换行符终止。
这是示例代码(有点刻意地表达了观点):
function indent () { (set -o pipefail; "$@" 2>&1 | sed 's/^/ /';); }
function some_cleanup () {
# ... some commands
read -rp "Do you want to force a dismount? (y/n)" yesno
if [ "$yesno" = "yes" ]; then force_dismount; fi
}
indent some_cleanup