slt*_*son 8 parameters bash pipe tail
我试图将tail命令的输出传递到另一个bash脚本来处理:
tail -n +1 -f your_log_file | myscript.sh
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,$ 1参数(在myscript.sh中)永远不会到达.我错过了什么?如何管道输出作为脚本的输入参数?
PS - 我希望tail能够永远运行并继续将每一行连接到脚本中.
编辑 现在myscripts.sh的全部内容是:
echo $1;
Run Code Online (Sandbox Code Playgroud)
che*_*ner 15
通常,这是处理脚本标准输入的一种方法:
#!/bin/bash
while read line; do
echo $line
done
Run Code Online (Sandbox Code Playgroud)
这是一个非常粗糙的bash相当于cat.它确实展示了一个关键事实:脚本中的每个命令都从shell继承了它的标准输入,所以你真的不需要做任何特殊的事情来访问进来的数据.read从shell获取它的输入,你的情况)从tail通过管道连接到它的过程获得输入.
另一个例子,考虑这个脚本; 我们称之为'mygrep.sh'.
#!/bin/bash
grep "$1"
Run Code Online (Sandbox Code Playgroud)
现在是管道
some-text-producing-command | ./mygrep.sh bob
Run Code Online (Sandbox Code Playgroud)
行为与...相同
some-text-producing-command | grep bob
Run Code Online (Sandbox Code Playgroud)
$1 如果您像这样调用脚本,则设置为:
./myscript.sh foo
Run Code Online (Sandbox Code Playgroud)
然后$1有值"foo".
位置参数和标准输入是分开的; 你可以做到这一点
tail -n +1 -f your_log_file | myscript.sh foo
Run Code Online (Sandbox Code Playgroud)
现在标准输入仍然来自tail过程,$1仍然设置为'foo'.