来源:ChatGPT
问
在 shell 脚本中读取上一个脚本从管道输出的数据,并对每一行进行处理
ChatGPT 说:
在 Shell 脚本中,你可以通过从标准输入 (stdin) 读取数据来处理从管道传递的数据。以下是一个示例脚本,展示如何从前一个脚本通过管道传递的数据中逐行读取并进行处理。
假设你有两个脚本 script1.sh
和 script2.sh
:
script1.sh
这个脚本生成一些数据并通过管道将数据传递给 script2.sh。
#!/bin/bash
# 生成一些数据并输出
echo "line 1: Hello World"
echo "line 2: Hello Shell"
echo "line 3: Hello Script"
script2.sh
这个脚本将从 script1.sh 接收到的数据逐行读取,并对每一行进行处理。你可以使用 while 循环和 read 命令来实现逐行读取。
#!/bin/bash
# 从标准输入逐行读取数据
while IFS= read -r line; do
# 对每一行进行处理,这里只是简单地输出并附加一个前缀
echo "Processed: $line"
done
执行
你可以使用管道将 script1.sh 的输出传递给 script2.sh:
./script1.sh | ./script2.sh
解释
script1.sh
生成一些数据并通过管道传递给 script2.sh
。
script2.sh
使用 while
循环和 read
命令逐行读取数据,并在每一行前加上 Processed:
作为示例处理。
结果
运行以上命令会得到如下输出:
Processed: line 1: Hello World
Processed: line 2: Hello Shell
Processed: line 3: Hello Script
这样你就可以在 script2.sh
中对每一行数据进行自定义处理。