我正在尝试将 tail 命令的输出通过管道传输到另一个 bash 脚本中进行处理:
tail -n +1 -f your_log_file | myscript.sh
但是,当我运行它时,永远不会到达 $1 参数(在 myscript.sh 内)。我缺少什么?如何通过管道将输出作为脚本的输入参数?
PS - 我希望 tail 永远运行并继续将每一行管道输送到脚本中。
Edit目前 myscripts.sh 的全部内容是:
echo $1;
一般来说,这是处理脚本标准输入的一种方法:
#!/bin/bash
while read line; do
echo $line
done
这是一个非常粗略的 bash 相当于cat
。它确实证明了一个关键事实:脚本中的每个命令都从 shell 继承其标准输入,因此您实际上不需要执行任何特殊操作即可访问传入的数据。read
从外壳获取输入,外壳(在您的情况下)从外壳获取输入tail
通过管道与其连接的进程。
作为另一个例子,考虑这个脚本;我们将其称为“mygrep.sh”。
#!/bin/bash
grep "$1"
现在管道
some-text-producing-command | ./mygrep.sh bob
行为相同于
some-text-producing-command | grep bob
$1
如果您像这样调用脚本,则已设置:
./myscript.sh foo
Then $1
值为“foo”。
位置参数和标准输入是分开的;你可以这样做
tail -n +1 -f your_log_file | myscript.sh foo
现在标准输入仍然来自tail
过程,以及$1
仍设置为“foo”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)