gpt4 book ai didi

bash - 管道尾部输出到另一个脚本

转载 作者:行者123 更新时间:2023-11-29 08:54:11 26 4
gpt4 key购买 nike

我正在尝试将 tail 命令的输出通过管道传输到另一个 bash 脚本中进行处理:

tail -n +1 -f your_log_file | myscript.sh

但是,当我运行它时,永远不会达到 $1 参数(在 myscript.sh 中)。我错过了什么?如何通过管道将输出作为脚本的输入参数?

PS - 我希望 tail 永远运行并继续将每一行输送到脚本中。

编辑现在 myscripts.sh 的全部内容是:

echo $1;

最佳答案

通常,这是一种处理脚本标准输入的方法:

#!/bin/bash

while read line; do
echo $line
done

这是一个非常粗略的 bash,相当于 cat。它确实证明了一个关键事实:脚本中的每个命令都从 shell 继承了它的标准输入,所以你真的不需要做任何特殊的事情来访问传入的数据。read 接受它的来自 shell 的输入,它(在您的例子中)从通过管道连接到它的 tail 进程获取输入。

作为另一个例子,考虑这个脚本;我们将其称为“mygrep.sh”。

#!/bin/bash

grep "$1"

现在管道

some-text-producing-command | ./mygrep.sh bob

行为相同

some-text-producing-command | grep bob

$1 如果您这样调用脚本,则会设置:

./myscript.sh foo

那么 $1 的值为“foo”。

位置参数和标准输入是分开的;你可以这样做

tail -n +1 -f your_log_file | myscript.sh foo

现在标准输入仍然来自 tail 进程,并且 $1 仍然设置为 'foo'。

关于bash - 管道尾部输出到另一个脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com