在我的 bash 脚本中,我需要检查记录器二进制文件是否存在。如果是这样,我将应用程序输出通过管道传输给它。
编辑--------
| 它需要是管道,应用程序应该永久工作。
---------------
我试图将管道的东西放到一个变量中,然后再使用它。就像是:
if [ -e /usr/bin/logger ]; then
OUT=| /usr/bin/logger
fi
application param1 2>&1 $OUT > /dev/null &
但它不起作用,输出不会通过管道传输到记录器。如果我将管道内容直接放入应用程序起始线,它就可以工作。不幸的是,如果我在 if/else 语句中使用带有和不带有记录器内容的命令行,那么真正的脚本会变得太复杂 - 原因是我已经有 if/else 并且添加新的会增加一倍的案例数量。
简单的测试应用
TMP=| wc -m
echo aas bdsd vasd $TMP
给
$ ./test.sh
0
aas bdsd vasd
似乎以某种方式 command1 和 command2 分别执行。
我设法解决了这个问题(在测试脚本和真实脚本中),使用eval
条件内容并将其放在双引号中。
TMP="| wc -m"
eval echo aas bdsd vasd $TMP
$ ./test.sh
14
感觉像是一种解决方法。正确的方法是什么?