【发布时间】:2020-06-15 11:50:02
【问题描述】:
我编写了一个小 shell 脚本,它在容器启动过程中创建了多个扩展名为 .dist 的文件的副本,而没有扩展名。
#! /bin/sh
path=$(pwd)
echo $path
shopt -s dotglob
for file in ./*.dist; do
filename=$(basename -- "$file")
#echo $filename
name="$path/${filename%.*}"
#echo $name
if [ -a "$name" ]; then
echo "$name already exists."
else
echo "copy $file to $name"
cp -f "$file" "$name";
fi
done;
shopt -u dotglob
在本地,它在我的 MacO 上运行良好,但在容器中,Alpine 不使用 bash,而是使用 sh 作为 shell,并且它不知道“shopt”命令。
当您使用 bash 时,“shopt”是我可以安装的东西还是只是一个可用的命令?
如果 shopt 不可用,我如何更改我的脚本,让 for 循环查找隐藏文件(前面带有点)以及普通文件?
示例,应该都可以找到: phpstan.neon.dist .php_cs.dist
【问题讨论】:
-
你试过比较
ls *.dist和ls -a *.dist吗?您可以将其与diff进行比较 -
究竟如何?我的 for 条件的语法是什么?
-
如果您真的想要 bash(而不是修复脚本以在 Busybox 中运行),您是否尝试过
apk add bash? -
不,我肯定更喜欢在 sh 中工作的脚本。添加 bash 只是最后的解决方案。
-
for file in ./*.dist .*.dist?