在后续问题中昨天提出的问题:
我正在 Datastage ETL 工具中运行以下命令,该工具在 Linux 中执行脚本。
我执行了:
for file in /Path/filename_*; do [[ $(wc -l "$file" | cut -d' ' -f1) -eq 1 ]] && rm $file ; done
Reply=0
在这种情况下,我的文件夹中有空文件:
for file in /Path/filename_*; do [[ $(wc -l "$file" | cut -d' ' -f1) -eq 1 ]] && rm $file ; done
Reply=1
我的文件夹里没有空文件。
两者都是相同的命令,但有不同的回复,如果我收到回复代码 1,我的工作就会失败
答案1
为了避免 留下非零状态[[
,您可以使用if
语句而不是&&
运算符:
if [[ $(wc -l <"$file") -eq 1 ]]; then
echo rm -- "$file"
fi
您可能只需要读取第二行,而不是计算所有行:
for file in /Path/filename_*; do
[ -f "$file" ] || continue
{
read _
read _ || echo rm -- "$file"
} <"$file"
done
如果第二行read
失败,则没有第二行(根据 POSIX)。