不要使用for dir in $DIR_PROJECTS,因为如果任何项目包含空格,它们将被拆分。 @EdMorton评论道: [...]DIR_PROJECTS应该是for dir in "${DIR_PROJECTS[@]}"访问的数组,而不是标量变量[...] 如果DIR_PROJECTS中的项不是绝对路径,则脚本将无法工作,正如@TedLyngmo所解释的那样。 在脚本中更改目录通常很麻烦,所以最好尽可能避免。如果myScript.py使用的路径不限于当前工作目录,那么这将只使用find,而不更改目录:
DIR_PROJECTS=(
"path1"
"path2"
)
for dir in "${DIR_PROJECTS[@]}"; do
/scripts/myScript.py -f "$dir.xml"
done
2条答案
按热度按时间xdnvmnnf1#
由于您在循环的每次迭代中循环并执行
cd $dir
,因此在运行脚本后,您需要返回到cd $dir
之前的当前目录,否则下一次迭代将尝试从前一个$dir
访问cd
,如果您使用相对路径,这很可能会失败。最方便的解决方案是在子shell中运行它:
这样,当前shell将永远不会
cd
,下一次迭代将具有与前一次相同的当前目录。kxxlusnw2#
不要使用
for dir in $DIR_PROJECTS
,因为如果任何项目包含空格,它们将被拆分。@EdMorton评论道:
[...]
DIR_PROJECTS
应该是for dir in "${DIR_PROJECTS[@]}"
访问的数组,而不是标量变量[...]如果
DIR_PROJECTS
中的项不是绝对路径,则脚本将无法工作,正如@TedLyngmo所解释的那样。在脚本中更改目录通常很麻烦,所以最好尽可能避免。如果
myScript.py
使用的路径不限于当前工作目录,那么这将只使用find,而不更改目录:(请注意,我也用双引号将
"$dir.xml"
括起来,这也是防止$dir
中出现空格和特殊字符的重要措施。