在while循环中cd进入目录不起作用

时间:2012-05-04 09:27:33

标签: bash

我有以下脚本:

#!/bin/bash

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

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

4 个答案:

答案 0 :(得分:7)

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

  1. 您不测试目录。
  2. 在你的cd之后,你就呆在那里。
  3. 请试试这个:

    #!/bin/bash
    
    ls -1 | while read d
    do 
        test -d "$d" || continue
        echo $d
        (cd $d ; echo "In ${PWD}")
    done
    

答案 1 :(得分:4)

你不应该那样使用ls

#!/bin/bash

for d in */
do 
    [[ ! -d "$d" ]] && continue
    echo "$d"
    cd "$d"
    # do something
    cd "$OLDPWD"
done

答案 2 :(得分:0)

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

dir=`pwd`
ls -1 | while read d
do 
    [[ -f "$d" ]] && continue
    cd "$dir"
    echo $d
    cd $d
    #....
done

答案 3 :(得分:0)

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

我愿意这样做:

#!/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