我写了一个脚本 用于列出指定目录(如果没有指定就是当前目录)下的目录,可是执行的时候发现奇怪的问题,echo 命令有时候执行,有时候不执行。
# list only directorys ,no other type of file
# set -o xtrace
trap 'rm /tmp/$$' 0 1 2 3 15
if [ ! -d $1 ] ; then
echo "argment must be a directory." >&2
exit 1
fi
ls $1 > /tmp/$$
while read i
do
[ -d "$i" ] && echo "$i"
done < /tmp/$$
这是执行lsdir /home 调试时的一段输出
++ '[' -d backup ']'
++ read i
++ '[' -d debs ']'
++ read i
++ '[' -d shaoye ']'
++ read i
++ '[' -d lost+found ']'
++ echo lost+found
lost+found
++ read i
++ '[' -d xiamingshi ']'
++ read i
++ rm /tmp/3648
其实/home目录下的全都是目录,但是却发现只有一个目录被 echo 了,我在当前目录下执行则完全正确,即使指定的目录是当前目录也正确。比如我在/tmp目录下执行 lsdir /tmp 就没有问题,执行 ls ~ 就什么都显示不出来了,但切换到家目录,结果就反过来了,执行 ls ~ 可以显示所有的目录,但执行 lsdir /tmp 就什么都没有,调试的时候发现输出跟上面类似,执行 [ -d "$i" ]后,后面的echo 命令都没有执行,上面的还执行了一个 "echo lost+found"呢。我单纯将这段代码拿出来,将 $i替换成相应的值然后在虚拟终端上执行却成功了。我猜是 read 的重定向输入造成了? 但很糊涂
请教高明