Centos
在一行中將所有程式碼行重定向到同一個文件
我有以下命令集用於更新我的託管服務提供商平台上我的 CentOs 共享託管分區中的所有 WordPress 站點(通過每日 cron)。
集合中的
wp
命令屬於WP-CLI程序,它是一個 Bash 擴展,用於 WordPress 網站上的各種 shell 級操作。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
用於寫入但最初將其截斷。這意味著每個新> 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
(或2>&3 3>&-
以免使用他們不需要的 fd 污染命令) :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