我正在尝试在当前不包含缓存插件的所有网站上安装WordPress缓存插件。我循环遍历所有cPanel用户,但在运行时得到一些奇怪的结果。一个班轮是:
for i in $(ls -I . -I .. /var/cpanel/users) ; do
WPPATH=$(find /home/$i/public_html/ -type f -name wp-config.php)
WPPLUGINPATH="$(echo "${WPPATH//wp-config.php/wp-content/plugins/}")"
cd $WPPLUGINPATH
[ -d $WPPLUGINPATH*cache* ] || \
wp --allow-root plugin install cache-enabler --skip-plugins --skip-themes
sleep 3
chown -R $i: $WPPLUGINPATH
echo $WPPLUGINPATH
done
它适用于大多数人,但获得随机点击:
/home/userC/public_html/wp-content/plugins/
Error: This does not seem to be a WordPress install.
Pass --path=`path/to/wordpress` or run `wp core download`.
chown: missing operand after ‘userA:’
Try 'chown --help' for more information.
您可以看到某些内容已关闭,因为它引用了userC的路径,但chown是关于userA的错误
它还声明没有WP安装,但如果我手动cd到该目录,我可以运行wp-cli命令并安装插件而不会出现问题。
另一个错误:
/home/userA/public_html/wp-content/plugins/
-bash: [: /home/userB/public_html/wp/wp-content/plugins/: binary operator expected
Warning: cache-enabler: Plugin already installed.
Success: Plugin already installed.
非常感谢任何帮助
答案 0 :(得分:3)
错误-bash: [: /home/userB/public_html/wp/wp-content/plugins/: binary operator expected
表示路径名包含空格。
首先,不要解析ls
的输出。改用glob。
其次,总是引用变量名称以避免单词拆分和无意的通配。这是您的问题的根本原因。
示例:
[ -d /path/name space/to/something.conf ]
-bash: [: /path/name: binary operator expected
您的新脚本应如下所示:
for i in /var/cpanel/users/*; do
WPPATH=$(find "/home/${i##*/}/public_html/" -type f -name wp-config.php)
WPPLUGINPATH="${WPPATH%/*}/wp-content/plugins/" # Useless use of echo
if pushd "$WPPLUGINPATH"; then
compgen -G "${WPPLUGINPATH}*cache*" > /dev/null || wp --allow-root plugin install cache-enabler --skip-plugins --skip-themes
sleep 3
chown -R "${i##*/}" "$WPPLUGINPATH"
echo "$WPPLUGINPATH"
popd
fi
done
正如@Charles Duffy在下面的评论中提到的,此find "/home/${i##*/}/public_html/" -type f -name wp-config.php
可能会产生多个结果。使用for循环来处理每个循环。
此行[ -d "$WPPLUGINPATH"*cache* ]
仅在扩展为单个路径名时才有效。请改用bash builtin compgen
。 compgen
将根据模式"${WPPLUGINPATH}*cache*"
生成文件名完成。如果可以生成模式,则返回true;如果没有模式的文件,则返回false。
最后但并非最不重要的是,改变使用all-caps变量的习惯,以避免无意中覆盖环境变量。
答案 1 :(得分:0)
我最终采用了不同的方式,因为即使被@alvits改写也无法使其正常工作,但确实有所帮助,所以我想说谢谢。
我最后只收集了几个服务器的一些统计信息,将缓存插件列表放在一起并提出:
{{1}}