在Linux中使用循环更改目录

Vam*_*avi 4 unix linux bash

我想更改目录以在每个目录中执行任务。以下是代码:

for i in {1..10}
do
cd dir/subdir$i
bla... bla.. bla..
done
Run Code Online (Sandbox Code Playgroud)

但是我收到错误:

 not found [No such file or directory]
Run Code Online (Sandbox Code Playgroud)

我已尝试以下操作,但仍然出现与上述相同的错误:

cd $(echo dir/subdir"$i")
cd $(eval dir/subdir"$i")
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

问题可能是因为您想要更改的所有目录都是相对于原始基本目录的。解决这个问题的一种方法是使用(...)子 shell:

for i in {1..10}; do
    (
    cd dir/subdir$i || continue
    cmd1
    cmd2
    )
done
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用以下命令返回到上一个目录cd "$OLDPWD"

for i in {1..10}; do
    cd dir/subdir$i || continue
    cmd1
    cmd2
    cd "$OLDPWD"
done
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用pushdand popd

for i in {1..10}; do
    pushd dir/subdir$i || continue
    cmd1
    cmd2
    popd
done
Run Code Online (Sandbox Code Playgroud)