在linux中使用循环更改目录

在linux中使用循环更改目录,linux,bash,unix,Linux,Bash,Unix,我想更改目录以在每个目录中执行任务。代码如下: for i in {1..10} do cd dir/subdir$i bla... bla.. bla.. done 然而,我得到了一个错误: not found [No such file or directory] 我已尝试了以下操作,但仍然出现上述错误: cd $(echo dir/subdir"$i") cd $(eval dir/subdir"$i") 问题可能是因为所有要更改为的目录都是相对于原始基目录的。 解决此问题的一种方

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

for i in {1..10}
do
cd dir/subdir$i
bla... bla.. bla..
done
然而,我得到了一个错误:

 not found [No such file or directory]
我已尝试了以下操作,但仍然出现上述错误:

cd $(echo dir/subdir"$i")
cd $(eval dir/subdir"$i")

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

for i in {1..10}; do
    (
    cd dir/subdir$i || continue
    cmd1
    cmd2
    )
done
另一种方法是使用
cd“$OLDPWD”
返回上一个目录:

另一种方法是使用
pushd
popd

for i in {1..10}; do
    pushd dir/subdir$i || continue
    cmd1
    cmd2
    popd
done

第一个表单是可以的,但您应该检查以确保返回到原始目录,或者您正在子shell(即,
cd dir/subdir$i;bla bla bla;cd../.
(cd dir/$subdir$i;bla bla bla)
)中进行cd(和操作)我也在提供
cd//subdir$i
,我设置了
i=1
并尝试了
cd/dir/subdir$i
,其中
/dir/subdir$i
是从根开始的完整目录。仍然面临同样的错误。谢谢mate@PSkocik。路径上发生了一些奇怪的事情。我现在就分类。直接从根目录给出整个路径对我来说不起作用。脱离主题,因此已经被提升:我认为当
cd
失败时,应该跳过
cmd1
cmd2
。可能建议
cd dir/subdir$i&&cmd1&&cmd2
for i in {1..10}; do
    pushd dir/subdir$i || continue
    cmd1
    cmd2
    popd
done