내 호스팅 공급자 플랫폼의 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
답변2
중괄호를 사용할 수 있습니다.그룹블록을 만들고 모든 출력을 리디렉션합니다.
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>myErrors.txt
popd
fi
done