我正在尝试在 Debian 10 上编写一个 bash 脚本:
- 查看某个目录
- 发现其所有子目录
- 检查哪个有文件
fullchain.pem
- 转换此文件
openssl
并将结果复制到另一个目录。
这就是我想做的:
ROOTPATH="/etc/letsencrypt/live"
for PATH in $ROOTPATH/*
do
if test -f "${PATH}/fullchain.pem"; then
openssl pkcs12 -export -out $PATH/fullchain.pfx -in $PATH/fullchain.pem -inkey $PATH/privkey.pem -passin pass:whatever -passout pass:whatever
cp $PATH/fullchain.pem ./Server/fullchain.pfx
fi
done
问题:和openssl
都会cp
导致command not found
错误。看来只能echo
在循环内部或循环之后起作用。其他所有内容,甚至基本命令(即touch
)都会抛出此错误。
我自然已经openssl
安装了,命令不可能cp
少。它们都从命令行运行。
我发现它只发生在循环内部或循环之后。如果我尝试在该行之前调用openssl
or ,它们会正确运行。cp
for PATH...
即使这个简化版本也会引发相同的错误:
for PATH in "/etc/letsencrypt/live/*"
do
cp
done
循环出了什么问题,为什么会导致如此奇怪的错误?
答案1
换成PATH
别的东西。最好避免使用任何环境变量作为迭代器。