使用bashforloop从位于子目录中的单独文件运行pythondoctest

使用bashforloop从位于子目录中的单独文件运行pythondoctest,python,bash,shell,for-loop,doctest,Python,Bash,Shell,For Loop,Doctest,我正在测试大量学生的python项目。我在一个单独的文件中创建了一个doctest,比如说,mydoctest.rst doctest的第一行导入学生项目的模块: 从project3导入functionname 当我从与学生项目相同的目录调用doctest时,doctest工作正常: studentA$ python3 -m doctest mydoctest.rst 我想做的是使用bashforloop命令为每个子目录执行上述操作,因此我尝试执行以下操作 parentdirectory$ f

我正在测试大量学生的python项目。我在一个单独的文件中创建了一个doctest,比如说,
mydoctest.rst

doctest的第一行导入学生项目的模块:

从project3导入functionname

当我从与学生项目相同的目录调用doctest时,doctest工作正常:

studentA$ python3 -m doctest mydoctest.rst
我想做的是使用bashforloop命令为每个子目录执行上述操作,因此我尝试执行以下操作

parentdirectory$ for d in *; do python3 -m doctest "$d/"mydoctest.rst; done
但是,它尝试在当前目录中而不是在每个子目录中查找模块

在执行python3-mdoctest之前,有没有办法先将cd放入每个子目录

我目前的解决方法(我不满意)是:
对于d in*;制作cd“$d”;python3-m doctest mydoctest.rst;光盘完成

我建议使用subshell
(…)
cd

for d in *; do (cd "$d" && python3 -m doctest mydoctest.rst); done
这应该行得通

for d in *; do (cd "$d" ; python3 -m doctest mydoctest.rst); done

我接受了你的答案,并让它在我的评分过程中发挥作用:
用于d in*;do(cd“$d”;python3-m doctest doctest3.rst;echo$PWD);完成
@egunawan只需点击“向上/向下投票”按钮下方的“勾选”标记。使用
有什么区别
&&
?它们似乎做了同样的事情。&&将在新线程(但相同的环境)中启动该命令之后再启动该命令,并且不能保证该命令在启动之前已经完成。虽然对于像“cd”这样的小东西,这可能会及时完成。我想你说的是“&”;是一个序列化运算符,它会先执行命令再执行;然后是后面的命令将立即执行这两项操作,而无需等待对方是一个布尔运算符,它将首先计算第一个命令,如果为false,它将知道整个表达式为false,因此它不会计算第二个命令。如果第一个命令为true,它将计算第二个命令,以查看该命令是否也是true。