모든 코드 줄을 동일한 파일의 한 줄로 리디렉션

모든 코드 줄을 동일한 파일의 한 줄로 리디렉션

내 호스팅 공급자 플랫폼의 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수 있습니다 .popdfor

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

관련 정보