当使用 shell glob 时,Ubuntu cron.daily 返回路径错误 - 我的路径出了什么问题?

当使用 shell glob 时,Ubuntu cron.daily 返回路径错误 - 我的路径出了什么问题?

在 Ubuntu 16.04 中,这是我的代码/etc/cron.daily/cron_daily

#!/bin/bash
for dir in "/var/www/html/*/"; do
if pushd "$dir"; then
wp plugin update --all --allow-root
wp core update --allow-root
wp language core update --allow-root
wp theme update --all --allow-root
rse
popd
fi
done

我昨天设置了这个,今天我的电子邮件中收到此错误:

/etc/cron.daily/cron_daily:

/etc/cron.daily/cron_daily: 第 3 行: Pushd: /var/www/html/*/: 没有这样的文件或目录

为什么会发生这种情况?我假设引号可以防止 shell 通配符,但如果是这样,应该用什么来替换它们?

答案1

路径扩展在双引号中不起作用。

简单测试:

$ ls -ld /lib*
drwxr-xr-x 23 root root 4096 Jul 14  2017 /lib
drwxr-xr-x  2 root root 4096 Jun 21  2017 /lib64

$ ls -ld "/lib*"
ls: cannot access '/lib*': No such file or directory

答案2

用 * 扩展路径在双引号中不起作用。

你可以这样尝试:

#!/bin/bash
for dir in /var/www/html/*/; do
  if pushd "$dir"; then
    wp plugin update --all --allow-root
    wp core update --allow-root
    wp language core update --allow-root
    wp theme update --all --allow-root
    rse
   popd
  fi
done

相关内容