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

ben*_*ben 3 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
Run Code Online (Sandbox Code Playgroud)

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

Ini*_*ian 5

这不是因为echo写入stdout,而是输出find写入它,只是压缩它/dev/null

if find "$f" -newermt 2017-03-13 ! -newermt 2017-03-14 > /dev/null
Run Code Online (Sandbox Code Playgroud)

这样,你只需要使用的返回码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
Run Code Online (Sandbox Code Playgroud)