linux - Bash 脚本 cd 问题

标签 linux macos bash unix

大家好,我的脚本有一些问题。我读到从脚本中更改当前目录是一个问题。基本上我正在寻找一个包含项目文件夹和其中任何子文件夹的 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/

相关文章:

linux - 从 Linux 到 Windows SFTP 服务器的 Rsync

linux - cpio 在为 live 重新打包 initrd.lz 时工作不正常

PHP 执行 linux 命令终止得太快?

ruby - mac os x 10.9-brew 服务器需要 sinatra 错误

regex - 继续 bash 脚本

cocoa - 在 AppleScript 中调整不可编写脚本的应用程序的窗口大小

macos - 没有网络连接时启动 NetworkState

Python Popen shell 脚本但失败

regex - 使用 grep 仅显示匹配的字符串

C - 使用 Execvp 执行 Bash 命令