大家好,我的脚本有一些问题。我读到从脚本中更改当前目录是一个问题。基本上我正在寻找一个包含项目文件夹和其中任何子文件夹的 php 文件。我想将目录更改为该文件夹所在的位置并为其执行命令。到目前为止还没有运气。
function findPHP(){
declare -a FILES
FILES=$(find ./ -name \*.php)
for file in "${FILES[@]}"
do
DIR=`dirname file`
( cd $DIR && doSomethingInThisDir &(...))
done
任何帮助将不胜感激。
最佳答案
您正在尝试将 FILES
作为数组进行迭代,但它只有一个元素。为了将子 shell 的结果放入数组中,您可以:
FILES=($(find ./ -name \*.php))
请注意,它会按空格分割文件名,因此即使您在下面正确引用,它也无济于事。或者,您可以让它在下面拆分(即使用现有的FILES
)并使用:
for file in $FILES
如果您使用的是 bash 4
,您可能想看看递归通配符...这会让事情变得更容易:
for file in **/*.php
请注意,您必须设置 globstar
shell 选项,可以使用 shopt -s globstar
启用该选项。这种方式更简单,并且不会因空格而中断。
此外,您可能需要这里的 $file
:
DIR=`dirname $file`
或者只使用参数扩展:
DIR=${file%/*}
关于linux - Bash 脚本 cd 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11521729/