Pushdはどのように機能しますか?

Pushdはどのように機能しますか?

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

私が尋ねたい質問は実際には次のとおりです。

  1. この変数は、同じ行のアスタリスク( )とどのように似ていますかdir*dir/var/www/html

  2. pushd-popdここでシーケンス(?)はどのように機能しますか?私はこれを「forループの各繰り返しのように$ dirの中にあるなら何かをしなさい」と理解しています。

答え1

dir変数は、*同じ行の直後に続くアスタリスク()とどのように似ています$dir/var/www/html/

バッシュはそうです。シェルボール動作/動作ですが、1つを誤解しました。dir/*以下を含むglobです。すべてのファイルすべてのディレクトリだけでなく、内からdir:POSIX環境では、ディレクトリはファイルタイプpushdただし、この場合、ディレクトリのみがforループとそれ以降の-pairsに関連付けられますpopd

pushd-popdここでシーケンス(?)はどのように機能しますか?私はこれを「$dirforループのような各反復内で何かをする場合」と理解しています。

pushdpopd「スタック」というデータ構造を使用する一対のツールです。スプリングディスペンサーを想像してみてください。フェズディスペンサー

もしあなたならプッシュ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前の位置に戻り、次のループ反復を実行します。

関連情報