如何 cd 到选定的目录以在循环中的每个目录中应用代码 (shell)?

How to cd into selected directory to apply code within each dir in a loop (shell)?

这就是我的 shell 脚本目前的样子

#!/bin/bash

for dir in ~/Trinchera/shell_example/*; do
    cd $dir
    cd test/inputs/
    ./stepwat -f files.in -o
    wait
done 

它 运行 成功了,但是它在实际 运行ning 之前首先显示了这个错误消息。

./loop_60_stepwat.sh: line 13: cd: test/inputs/: No such file or directory
./loop_60_stepwat.sh: line 15: ./stepwat: No such file or directory
./loop_60_stepwat.sh: line 11: cd: /home/harley/shell_example/run_60_stepwat.sh: Not a directory
./loop_60_stepwat.sh: line 13: cd: test/inputs/: No such file or directory
./loop_60_stepwat.sh: line 15: ./stepwat: No such file or directory

结果不错,但我想知道错误是什么意思,因为它仍然 运行 脚本正确。

我想在 运行 脚本时解决或消除此错误消息。 我认为该错误可能与 cd $dir 部分,因为我不确定如何正确地 cd 进入所选目录,它现在似乎可以解决问题。

*顺便说一句,每个目录下的所有文件和文件夹都完全相同,只是目录名称不同。

此外,由于我是初学者,如果对我的格式提出任何意见或反馈,我将不胜感激。

您的 shell_example 目录包含没有 test/inputs 子目录的子目录。这会导致第一个“没有这样的文件或目录”错误。

“不是目录”错误是因为一些匹配通配符的名称是文件,而不是目录,所以您不能 cd 它们。

当这些 cd 命令失败时,您最终会进入一个不包含 stepwat 的目录,因此您在尝试 运行 该命令时会遇到错误。

您可以使用与您要更改到的最终目录匹配的 willdcard 来简化。您可以先检查 stepwatfiles.in 是否存在,然后再尝试使用它们。

#!/bin/bash

for dir in ~/Trinchera/shell_example/*/test/inputs; do
    if [ -x "$dir/stepwat" ] && [ -r "$dir/files.in" ]
    then
        cd "$dir"
        ./stepwat -f files.in -o
    fi
done