Bashを含むUbuntu 16.04では、すべてのWordPressコンポーネント(コア、翻訳、テーマ、プラグイン)をアップグレードする便利な方法がないときに問題が発生しました。次のコードを使用して問題を解決しました。
cat <<-EOF > /etc/cron.daily/cron_daily
#!/bin/bash
drt="/var/www/html"
for dir in "$drt/*/"; do
if pushd "$dir"; then
wp plugin update --all --allow-root
wp core update --allow-root
wp language core update --allow-root
wp theme update --all --allow-root
rse
popd
fi
done
EOF
私が尋ねたい質問は実際には次のとおりです。
この変数は、同じ行のアスタリスク( )とどのように似ていますか
dir
?*
dir
/var/www/html
pushd
-popd
ここでシーケンス(?)はどのように機能しますか?私はこれを「forループの各繰り返しのように$ dirの中にあるなら何かをしなさい」と理解しています。
答え1
dir変数は、
*
同じ行の直後に続くアスタリスク()とどのように似ています$dir
か/var/www/html/
?
バッシュはそうです。シェルボール動作/動作ですが、1つを誤解しました。dir/*
以下を含むglobです。すべてのファイルすべてのディレクトリだけでなく、内からdir
:POSIX環境では、ディレクトリはファイルタイプpushd
ただし、この場合、ディレクトリのみがforループとそれ以降の-pairsに関連付けられますpopd
。
pushd
-popd
ここでシーケンス(?)はどのように機能しますか?私はこれを「$dir
forループのような各反復内で何かをする場合」と理解しています。
pushd
popd
「スタック」というデータ構造を使用する一対のツールです。スプリングディスペンサーを想像してみてください。フェズディスペンサー。
もしあなたならプッシュPezディスペンサーの上部に「ピル」を押し込むなど、後で使用するためにアイテムをパイルに入れます。
もしあなたならポップミュージック使用または参照するために取り出すダミーの項目です。これはスタックから削除されます。
動作方法の簡単なpushd
例については、この動作を見てくださいpopd
。
$ pwd
/home/myuser
$ pushd /etc
/etc ~
$ pwd
/etc
$ pushd /usr/local
/usr/local /etc ~
$ pwd
/usr/local
$ popd
/etc ~
$ pwd
/etc
$ popd
~
$ pwd
/home/myuser
ループfor
は基本的に次のように動作しますもしこのディレクトリをディレクトリスタックにプッシュできます。これは、最初にディレクトリが現在存在し、2番目に、そのディレクトリが現在の作業ディレクトリであることを意味します。タスクを続行してpopd
前の位置に戻り、次のループ反復を実行します。