在脚本上使用 "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
但作为最多的人。已经说过排除 sys
、proc
...
这样的目录是有意义的
我正在制作一个 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
但作为最多的人。已经说过排除 sys
、proc
...