如何将变量重定向到文件但不在屏幕上显示

时间:2017-04-25 07:29:34

标签: bash shell

我有这个小代码来做一些数据处理。

#!/bin/sh
export DIR=`pwd`
if [ -d "$DIR" ] 
then
    for f in "$DIR"/HistoryData*; do
    if find "$f" -newermt 2017-03-13 ! -newermt 2017-03-14 
        then
            echo "$f" >> file
        fi
        done
else
    echo "$DIR does not exists"
fi
for f in $(cat < $DIR/file);do
        awk '/CO2/ && !/VAV/{ print $0 }' "$f" >> HistoryData_CO2
    done

在行echo "$f" >> file中我试图将变量写入文件,但它也在屏幕上显示值。如何在控制台上抑制值并只写入文件

1 个答案:

答案 0 :(得分:5)

这不是因为echo正在写入stdout,而是写入find的输出,只是将其抑制为/dev/null

if find "$f" -newermt 2017-03-13 ! -newermt 2017-03-14 > /dev/null

这样,您只需使用findif-clause的返回代码,该命令的输出不会打印到stdout,但会被压缩为NULL设备

但通常依赖find的输出并不是让代码工作的好方法。

find "$DIR" -name 'HistoryData*' -newermt 2017-03-13 ! -newermt 2017-03-14  -print0 | 
    while IFS= read -r -d $'\0' line; do 
        echo "$line" >> file
    done