我有几个多站点,每个都有几个站点,我想自动生成@aliases 对于有没有办法在我的site list?
我希望能够以单个站点为目标,而无需指定--url=http://domain.com/sub-site/
使用url的最后一部分似乎是alias.
$ 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站点列表--字段=url
自动生成别名(理想):
$wp站点别名
$wp cli别名--生成
无论解决方案是什么,都应该包括path:
到该站点的WordPress,并且(可选)能够生成尚未添加到的唯一别名~/.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
Remote Alias Generator (run on server)
ssh=user@127.0.0.1;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;
SO网友:jgraup
<小时>
LOCAL
对于本地别名,最好在配置中提前定义路径。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\'
Result
path: /www/wordpress/
@site-a:
url: http://domain.com/site-a/
@site-b:
url: http://domain.com/site-b/
<小时>
REMOTE
对于远程别名,最好是相对于配置给它们加前缀。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 ssh=user@127.0.0.1$HOME";fi\'
Result:
@remote-site-a:
url: http://domain.com/site-a/
ssh: user@127.0.0.1/www/wordpress/
@remote-site-b:
url: http://domain.com/site-b/
ssh: user@127.0.0.1/www/wordpress/
<小时>
LIST ALIASES
<人力资源>
aliases=$(wp cli alias | cut -d\':\' -f1 | grep -e "^@" | cut -d\':\' -f2 | sort);
<小时>
EXISTING ALIASES
<人力资源>
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\'
- 对于来自管道的循环,使用SITE作为值变量
| xargs -I %
- 选择有意义的符号
xargs -I \'ITEM\' sh -c \'echo ITEM; echo "2nd";\'
- 运行多个bash命令
cut -d\'/\' -f4 <<< SITE
- 从变量拆分
ALIAS=$(cut -d\'/\' -f4 <<< SITE)
- 拆分“/”上的URL,将第四个索引分配给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;
- 循环列表