有人能解释为什么通过stdin传递bash脚本数据会导致脚本中的命令不起作用吗?
脚本:

#!/bin/bash
ausearch -i -a 1221217

如果我运行以下命令,它将按预期输出ausearch结果:
./au.sh

但是,如果我这样做:
echo "blah" | ./au.sh

然后输出:
<no matches>

两个执行方法都应该返回相同的结果(因为ausearch是硬编码的),但是stdin似乎破坏了它。
我不是问如何在bash脚本中读取stdin数据。

最佳答案

ausearch如果stdin是管道,则更改其行为。如果是,它将搜索stdin而不是审计守护进程日志。您可以使用--input-logs强制它从日志中读取。

echo "blah" | ausearch -i -a 1221217 --input-logs

重定向stdin也会达到同样的目的。
#!/bin/bash
ausearch -i -a 1221217 < /dev/null

关于linux - 在stdin上通过管道传输数据时,调用ausearch的脚本的行为有所不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54426839/

10-09 04:52