すべてのコード行を同じファイルの1行にリダイレクトする

すべてのコード行を同じファイルの1行にリダイレクトする

내 호스팅 공급자 플랫폼의 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

おすすめ記事