@ aliases を自動生成したいマルチサイトがいくつかあり、それぞれにいくつかのサイトがあります。私の サイトリスト でエイリアスとしてそれらのサイトを同期する方法はありますか?
私は--url=http://domain.com/sub-site/
を指定する必要なしに単一のサイトをターゲットにすることができて、URLの最後の部分を使用することが エイリアス のための実行可能な名前のように思えます。
$ wp site list
+---------+----------------------------------------+---------------------+---------------------+
| blog_id | url | last_updated | registered |
+---------+----------------------------------------+---------------------+---------------------+
| 1 | http://domain.com/sub-site/ | 0000-00-00 00:00:00 | 2020-01-00 04:20:00 |
+---------+----------------------------------------+---------------------+---------------------+
$ wp cli alias
---
@all: Run command against every registered alias.
@sub-site:
url: http://domain.com/sub-site/
path: /www/wordpress
$ wp @sub-site theme list
---
...
私は助けることができる以下のコマンドを見つけることができるだけです。
現在のエイリアスを表示します。
$ wp cliエイリアス
すべてのサイトを表示
$ wpサイトリスト--field = url
(理想的)エイリアスを自動生成します。
$ wpサイトエイリアス
$ wp cli alias --generate
どのような解決策であれ、それはそのサイトのWordPressへのpath:
を含み、(オプションで)~/.wp-cli/config.yml
にまだ追加されていないユニークなエイリアスを生成できるようにするべきです。
WIP
home=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); for site in $(wp site list --field=url | sort); do alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")); if [ ! -z "$alias_name" ]; then echo -e "@$alias_name:\n url: $site\n path: $home\n"; fi; done;
またはpath=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); wp site list --field=url | sort | cut -d '/' -f4 | xargs -I '{}' echo -e "@{}:\n url: $url/{}\n path: $path\n"
| sort | sed -r "s#($url)##g" | cut -d '/' -f2 | xargs
| sort | tail -n+2 | cut -d '/' -f 4 | xargs
| sort | cut -d '/' -f4 | xargs
@site-a:
url: http://domain.com/site-a/
path: /www/wordpress/
@site-b:
url: http://domain.com/site-b/
path: /www/wordpress/
次のステップは、既存の別名に対して別名を検証することです。サイトパスによるソートも含む
並べ替え:sites=$(wp site list --field=url); readarray -t sorted < <(for a in "${sites[@]}"; do echo "$a"; done | sort); for a in "${sorted[@]}"; do echo "$a"; done
並べ替え:wp site list --field=url | sort
既存のエイリアス:wp cli alias | grep '^@' | grep ':$' | cut -d':' -f3
リモートエイリアスジェネレータ(サーバー上で実行)
[email protected];cd /www/wordpress/;home=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); for site in $(wp site list --field=url); do alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")); if [ ! -z "$alias_name" ]; then echo -e "@prefix-$alias_name:\n url: $site\n ssh: $ssh$home\n"; fi; done;
LOCAL
ローカルのエイリアスでは、config.ymlであなたのパスを事前に定義するのが最善です。それから、サイトをターゲットにするためにurl
を指定するだけで、変数をきれいにしてください。デフォルトはブログID順になっているため(サイトでは使用していません)、長いリストのサイトがある場合は、出力をソートすると便利です。
wp site list --field=url|sort|xargs -I 'SITE' sh -c 'ALIAS=$(cut -d'/' -f4 <<< SITE);if [ ! -z "$ALIAS" ];then echo -e "@$ALIAS:\n url: SITE";fi'
結果
path: /www/wordpress/
@site-a:
url: http://domain.com/site-a/
@site-b:
url: http://domain.com/site-b/
REMOTE
リモートのエイリアスでは、config.ymlに相対して接頭辞を付ける方が良いでしょう。したがって、この場合はremote-
です。また、WordPressのパスをssh
プロパティに設定することもできます。
HOME=$(wp eval "echo get_home_path();");wp site list --field=url|sort|xargs -I 'SITE' sh -c 'ALIAS=$(cut -d'/' -f4 <<< SITE);if [ ! -z "$ALIAS" ];then echo -e "@remote-$ALIAS:\n url: SITE\n [email protected]$HOME";fi'
結果:
@remote-site-a:
url: http://domain.com/site-a/
ssh: [email protected]/www/wordpress/
@remote-site-b:
url: http://domain.com/site-b/
ssh: [email protected]/www/wordpress/
リストエイリアス
aliases=$(wp cli alias | cut -d':' -f1 | grep -e "^@" | cut -d':' -f2 | sort);
既存のエイリアス
aliases=$(wp cli alias | cut -d':' -f1 | grep -e "^@" | cut -d':' -f2 | sort);
search="@site-a"
if ! grep $search <<< "$aliases"; then echo "NOT FOUND"; fi
BASH REFERENCE
VAR=$(echo "stuff")
- 出力をキャプチャするHOME=$(wp eval "echo get_home_path();")
- PHPを実行してvarに代入するwp site list --field=url | sort
- 結果のサイトリストをソートする| xargs -I 'SITE'
- パイプからのforループで、値変数としてSITEを使う| xargs -I %
- 意味のある記号を選ぶxargs -I 'ITEM' sh -c 'echo ITEM; echo "2nd";'
- 複数のbashコマンドを実行するcut -d'/' -f4 <<< SITE
- 変数から分割ALIAS=$(cut -d'/' -f4 <<< SITE)
- '/'でURLを分割し、4番目のインデックスをvarに割り当てますecho -e "\txyz\n\n"
- エスケープ文字を許可するif [ ! -z "$ALIAS" ];then echo -e "";fi
- 空でない変数に対して実行wp cli alias | grep '^@' | grep ':$'
- 結果配列に対する複数のフィルタgrep '^starts-with'
- 行は値で始まりますgrep 'ends-with$'
- 行は値で終わりますsed "s,$url,,g" <<< "$site"
- sed文字列を,
セパレータに置き換えますsed "s/find/replace/g" <<< "$value"
- sedの文字列を/
のセパレータに置き換えます(URLには不向きです)wp site list --field=url | tail -n+2
- 最初の項目をスキップするalias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site"))
- 複数の文字列の置き換えfor i in $(wp site list --field=url); do echo $i; done;
- リストをループスルーする