在脚本上使用 "wc -l" 比在终端上使用更重要

using "wc -l" on script counts more than using on terminal

我正在制作一个 bash 脚本,它是这样的:

#!/bin/bash
DNUM=$(ls -lAR / 2> /dev/null | grep '^d' | wc -l)
echo there are $DNUM directories.

问题是,当我 运行 直接在终端上输入这一行时:

ls -lAR / 2> /dev/null | grep '^d' | wc -l

我得到一个号码。

但是当我 运行 脚本时,它会显示一个更大的数字,比如 30 到 50 个。

这里有什么问题?
为什么 "wc" 命令在 运行 从脚本中调用它时会计算更多行?

这两个 运行 的根目录可能不同。而不是 ls 只查找目录,您可以使用此

find parent_directory -type d

并通过管道传送到 wc -l 进行计数。

/proc 目录将有进程并被视为目录,并且将从 运行 变为 运行。要将其排除在计数之外,请使用

find / -path /proc -prune -o -type d | wc -l

为了找到你的具体情况的差异,我建议 运行

#!/bin/bash
for r in 1 2; do
  ls -lAR / 2> /dev/null | grep '^d' > run${r}.txt 1> out${r}.txt
done
diff -Nura out1.txt out2.txt
rm -f out1.txt out2.txt

但作为最多的人。已经说过排除 sysproc ...

这样的目录是有意义的