Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash脚本光盘问题_Linux_Macos_Bash_Unix - Fatal编程技术网

Linux Bash脚本光盘问题

Linux Bash脚本光盘问题,linux,macos,bash,unix,Linux,Macos,Bash,Unix,大家好,我的脚本有一些问题。我已经读到,在脚本中更改当前目录有点困难。基本上,我要找的是一个包含项目文件夹和任何子文件夹的php文件。我想将目录更改为该文件夹所在的位置,并对其执行命令。到目前为止没有运气 function findPHP(){ declare -a FILES FILES=$(find ./ -name \*.php) for file in "${FILES[@]}" do DIR=`dirname file` ( cd $DIR && doSomethin

大家好,我的脚本有一些问题。我已经读到,在脚本中更改当前目录有点困难。基本上,我要找的是一个包含项目文件夹和任何子文件夹的php文件。我想将目录更改为该文件夹所在的位置,并对其执行命令。到目前为止没有运气

function findPHP(){
declare -a FILES
FILES=$(find ./ -name \*.php)
for file in "${FILES[@]}"
do

DIR=`dirname file`
( cd $DIR && doSomethingInThisDir &(...))

done

任何帮助都将不胜感激

您试图将
文件作为数组进行迭代,但它只有一个元素。为了将子shell的结果生成一个数组,您可以:

FILES=($(find ./ -name \*.php))
请注意,它会在空格上拆分文件名,因此即使您在下面正确引用,也不会有帮助。或者,您可以将其拆分为以下部分(即使用现有的
文件
),然后使用:

for file in $FILES
如果您使用的是bash4
,您可能想看看递归全局搜索。。。这将使它更容易:

for file in **/*.php
请注意,您必须设置
globstar
shell选项,您可以使用
shopt-s globstar
启用该选项。这种方法更简单,不会破坏空白

此外,您可能需要
$file
此处:

DIR=`dirname $file`
或者只使用参数展开:

DIR=${file%/*}

没有理由使用数组,也没有理由存储文件列表。如果您的
find
支持
-execdir
(例如gnufind 4.2.27),则使用它。否则,将cd放入子shell,就像您所做的那样:

#!/bin/bash
doSomethingInThisDir() ( cd $(dirname $1); ... )
export -f doSomethingInThisDir
find . -type f -exec bash -c 'doSomethingInThisDir {}' \;

我已经使用
()
而不是
{}
定义了函数,但是在这种情况下这不是必需的。通常,使用
()
会导致函数在子shell中运行,但在这里无论如何都会发生这种情况,因为find会为每个文件运行单独的进程

与其他(相关)问题一样;发生了什么事?请准确地发布所有相关错误消息,以改进您的问题。