5

我有以下脚本:

#!/bin/bash

ls -1 | while read d
do 
    [[ -f "$d" ]] && continue
    echo $d
    cd $d
done

问题是每个 cd 都说“[路径]:没有这样的文件或目录”,为什么?文件夹存在是因为我列出了它...

4

4 回答 4

8

我在您的代码中看到两个问题:

  1. 您不测试目录。
  2. 一旦你cd进入目录,你就呆在那里。

请试试这个:

#!/bin/bash

ls -1 | while read d
do 
    test -d "$d" || continue
    echo $d
    (cd $d ; echo "In ${PWD}")
done
于 2012-05-04T09:56:35.953 回答
6

你不应该那样使用ls

#!/bin/bash

for d in */
do 
    [[ ! -d "$d" ]] && continue
    echo "$d"
    cd "$d"
    # do something
    cd "$OLDPWD"
done
于 2012-05-04T11:05:30.300 回答
0

不知道你想要达到什么目的。你想做某种递归 dic 遍历吗?

这是我会这样做的:

#!/bin/bash                                                                                                                                                                                                                            
CWD="$(pwd)" #save starting directory
ls -1 | while read d
do
    [[ ! -d "$d" ]] && continue
    cd "$d"
    echo "Changed to directory" $d
    #Now you can do someting in the sub-directory
    cd "$CWD" #Change back to old directory
done
于 2012-05-04T10:54:47.457 回答
0

问题是您更改了脚本中的工作目录。这意味着第二个cd将在您之前输入的子目录中执行cd

dir=`pwd`
ls -1 | while read d
do 
    [[ -f "$d" ]] && continue
    cd "$dir"
    echo $d
    cd $d
    #....
done
于 2012-05-04T09:30:05.310 回答