【发布时间】:2023-01-20 17:16:48
【问题描述】:
我有一个简单的问题,我想用 bash 脚本解决:复制一个文件,然后复制在该文件中导入的所有文件,以及在该文件中导入的所有文件,等等。 这尖叫递归。
这些文件如下所示:
import "/path/to/otherfile.txt"
import "/path/to/anotherfile.txt"
information
otherinformation
...
不应该这么难,这是我写的:
#!/bin/bash
destination=/tmp
copy_imports () {
insfile=$1
contained_imports=$(grep "import" $insfile | awk -F' ' '{ print $2 }' | sed 's/"//g')
for imported_insfile in $contained_imports
do
copy_imports $imported_insfile
done
cp $insfile $destination
}
copy_imports $1
但由于某种原因,并非所有文件都被复制。我看到它正在为所有文件和嵌套导入调用递归,但不是所有文件都执行 cp 语句。
我完全不解,这是怎么回事?
非常感谢!
【问题讨论】:
-
缺少引用似乎是一个明显的解释。如果不是这样,请edit提供正确的minimal reproducible example。另见shellcheck.net和When to wrap quotes around a shell variable
-
您需要将函数的变量(
insfile、contained_imports和imported_insfile)设置为本地变量(例如local insfile="$1")。另外,我建议检查导入的文件是否已经被复制以避免重复工作。