试图从ls命令中删除stderr

时间:2013-06-11 13:25:20

标签: bash shell

所以我遇到了将ls命令传递给grep的问题。我基本上在一个文件中的for循环中运行ls -l,其中一些文件丢失,所以它给了我三条线的No file or directory found错误。我无法弄清楚的是如何只解析那些行并将其输出到另一个文件/变量。

for i in $file
do
    line=`/bin/echo $i | sed 's/source1_dir/dest1_dir/g'`
    /bin/ls -l $line | grep -i "No file"
done

当我尝试这样做时,它会输出三个错误但我无法将这些错误传递给另一个文件,如果这有意义的话。我认为这与stderr有关,但我不确定。

2 个答案:

答案 0 :(得分:5)

使用bash,您只需使用|&在管道后的命令中同时获取stdoutstderr

但使用测试可能更有用:

if [[ -e "$line" ]]; then
    ls -l "$line"
else
    echo "File $line doesn't exist"
fi

答案 1 :(得分:2)

使用stderr重定向。类似的东西:

/bin/ls -l $line 2>&1 | grep -i "No file"