我有以下命令集用于更新托管服务提供商平台上我的 CentOs 共享托管分区中的所有 WordPress 站点(通过每日 cron)。
集合中的wp
命令属于WP-CLI程序,它是用于 WordPress 网站上各种 shell 级操作的 Bash 扩展。pushd-popd
for dir in public_html/*/; do
if pushd "$dir"; then
wp plugin update --all
wp core update
wp language core update
wp theme update --all
popd
fi
done
目录public_html
是所有网站目录所在的目录(每个网站通常都有一个数据库和一个主文件目录)。
鉴于public_html
有一些目录不是WordPress 网站目录,WP-CLI 将返回有关它们的错误。
为了防止这些错误,我假设我可以这样做:
for dir in public_html/*/; do
if pushd "$dir"; then
wp plugin update --all 2>myErrors.txt
wp core update 2>myErrors.txt
wp language core update 2>myErrors.txt
wp theme update --all 2>myErrors.txt
popd
fi
done
而不是写2>myErrors.txt
四次(或更多次),有没有办法确保来自每个命令的所有错误都将在一行中转到同一个文件?
> file
操作员打开file
用于写入但最初将其截断。这意味着每个 new> file
都会导致文件的内容被替换。如果您希望
myErrors.txt
包含所有命令的错误,您需要只打开该文件一次,或者使用>
第一次和>>
其他时间(以追加模式打开文件)。在这里,如果您不介意
pushd
/popd
错误也转到日志文件,您可以重定向整个for
循环:或者,您可以在 2、3 以上的 fd 上打开日志文件,然后使用
2>&3
(或者2>&3 3>&-
为了不使用不需要的 fds 污染命令)您要重定向到日志文件的每个命令或命令组:您可以使用花括号对块进行分组并重定向所有输出: