通过unix bash脚本问题输入目录

1 unix bash shell

请注意,我要发布的这段代码是故意不完美的,如果目录中有一个文本文件但是完整的代码确实有这样的检查,则无法工作.但问题在于:

#!/bin/bash 
for d in *; do 
    cd $d 
done 
Run Code Online (Sandbox Code Playgroud)

生产:

./test: line 3: cd: 500: No such file or directory 
./test: line 3: cd: 536: No such file or directory 
./test: line 3: cd: 560: No such file or directory 
./test: line 3: cd: 572: No such file or directory 
./test: line 3: cd: out.txt: No such file or directory 
./test: line 3: cd: prob1: No such file or directory 
./test: line 3: cd: problem2: No such file or directory 
./test: line 3: cd: README: No such file or directory 
./test: line 3: cd: test: No such file or directory 
Run Code Online (Sandbox Code Playgroud)

其中500,536,560和572是应该能够打开的目录.如果我只做一张CD 500,那么我可以毫无问题地进入目录.但是当我在shell脚本中使用自动化过程时,它将无法工作.

好吧,所以进一步进入该计划后,我现在有:


#!/bin/bash
cd "$1"
for d in */; do
    (
         cd "$d"
        for file in $*; do
        (
                bla="$(head -4 $file|tail -1)"
                cd ~cfb43/cs265/a1
                echo $bla > out.txt
                cd
                cd "$1"
                cd "$d"
        )
        done
        cd "$1"
    )
done
Run Code Online (Sandbox Code Playgroud)

我收到:


head: error reading `/home/cfb43/cs265/a1': Is a directory
head: error reading `/home/cfb43/cs265/a1': Is a directory
head: error reading `/home/cfb43/cs265/a1': Is a directory
head: error reading `/home/cfb43/cs265/a1': Is a directory
head: error reading `/home/cfb43/cs265/a1': Is a directory
Run Code Online (Sandbox Code Playgroud)

我想要做的就是进入一个目录并从文件中读取并获取第四行文本并将其打印到我的文件夹中的out.txt.我不确定为什么这个代码卡在a1而不是至少500或类似的东西.任何进一步的帮助,我会非常感激

use*_*001 5

因为您尝试进入下一个子目录而不离开前一个子目录.你可以做到

#!/bin/bash 
for d in */; do 
    cd -- "$d"
    # do some stuff
    cd .. 
done 
Run Code Online (Sandbox Code Playgroud)

或使用子壳

#!/bin/bash 
for d in */; do 
    (
        cd -- "$d"
        # do some stuff
    )
done 
Run Code Online (Sandbox Code Playgroud)