循环后 bash 脚本中出现“命令未找到”错误

循环后 bash 脚本中出现“命令未找到”错误

我正在尝试在 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少。它们都从命令行运行。

我发现它只发生在循环内部或循环之后。如果我尝试在该行之前调用opensslor ,它们会正确运行。cpfor PATH...

即使这个简化版本也会引发相同的错误:

for PATH in "/etc/letsencrypt/live/*"
do
  cp
done

循环出了什么问题,为什么会导致如此奇怪的错误?

答案1

换成PATH别的东西。最好避免使用任何环境变量作为迭代器。

相关内容