所以我遇到了将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有关,但我不确定。
答案 0 :(得分:5)
使用bash,您只需使用|&
在管道后的命令中同时获取stdout
和stderr
。
但使用测试可能更有用:
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"