내 호스팅 공급자 플랫폼의 CentOs 공유 호스팅 파티션에 있는 모든 WordPress 사이트(일일 cron을 통해)를 업데이트하기 위한 다음 명령 세트가 있습니다.
wp
이 그룹 내의 명령은 pushd-popd
다음과 같습니다.WP-CLIWordPress 웹사이트에서 다양한 쉘 수준 작업에 사용되는 Bash 확장 프로그램입니다.
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
各コマンドのすべてのエラーが4回(またはそれ以上)以外の行で同じファイルに書き込まれるようにする方法はありますか?
ベストアンサー1
演算子は書き込み用に開かれますが、> file
最初file
は切り捨てられます。つまり、新しいファイルが出るたびに> file
ファイルの内容が置き換えられます。
すべてのコマンドのエラーを含めるには、ファイルを一度だけ開くか、最初とは異なる時間をmyErrors.txt
使用する必要があります(>
>>
追加モデル)。
ここでログファイルにエラーが発生したことを気にしない場合は、ループ全体をリダイレクトできpushd
ます。popd
for
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 2>myErrors.txt
または、2、3より高いfdでログファイルを開き、ログファイルにリダイレクトしたい各コマンドまたはコマンドグループを使用したり、2>&3
不要なfdでコマンドを汚染したりすることはできません。2>&3 3>&-
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
} 2>&3 3>&-
popd
fi
done 3>myErrors.txt