shell 如何捕获和处理在bash脚本中启动的输出?

aemubtdh  于 2022-11-30  发布在  Shell
关注(0)|答案(1)|浏览(737)

我正在写一个小的bash脚本,我编译了两个程序,然后在bash脚本的后台执行它们。这两个程序确实输出了一些通用文本。但是我需要在这些输出前面加上前缀,比如PROGRAM1: xxxxx。我该怎么做呢?我在这里找到了几个答案,但是它们并不完全适用于这种情况。
代码如下:

#!/bin/bash
echo "This program compiles 2 programs, executes them (executes the 2nd one first, then sleeps for 0.01 second which then executes program 1), then observes the outputs"

gcc -O3 -std=c11 one.c -o one
gcc -O3 -std=c11 two.c -o two

./two &
sleep 0.01
TWO_PID=$(pgrep two)

./one $TWO_PID

#"Prefix output statements here"
#add code here

#Cleanup
rm -f one two
vmpqdwk3

vmpqdwk31#

你可以这样做

#! /bin/bash

# ...

label() {
    while read -r l; do
        echo "$1: $l"
    done
}

./two | label "two" &
two_pid=$(pgrep two)
./one $two_pid | label "one"

您不需要休眠,但要小心,因为pgrep可能匹配多个进程。
此外,您应该使用make,而不是编译和移除。

相关问题