Você pode usar correspondência de padrões:
for i in $(drush site-alias) ; do
if [[ $i == *.* ]] ; then
drush "$i" command
fi
done
Eu quero executar um comando bash na saída da interface de linha de comando do drupal drush. drush site-alias
retorna uma lista de webroots, mostrando primeiro o nome do grupo e, em seguida, cada site desse grupo. O site em si é aliado no formato group.site
. Por exemplo, você pode obter
interno internal.site1 internal.site2 externo external.site1 external.site2 marketing marketing.site1 marketing.site2
Eu quero fazer um comando em cada um dos aliases do site, mas não no próprio alias do grupo. Eu preciso testar se a string tem um período, e se sim, execute:
for i in $(drush site-alias); do {if no period) drush $i command; done;
Como posso executar este teste?
Com qualquer shell parecido com o Bourne, você o escreveria:
case $i in
*.*) drush "$i" command;;
esac
Você pode fazer isso com uma expansão de substituição de padrão:
for i in $(drush site-alias); do
if [ -z "${i//[^.]/}" ]; then
# no period
drush "$i" command
fi
done
Sim, eu citei "$i"
, que é provavelmente algo que você deve fazer quando possível, evita surpresas. Embora neste caso não importe.
Apenas para uma outra resposta independente, sugerimos o uso de expansões de parâmetros do shell .
for i in $(drush site-alias)
do
if [[ ${i%.*} == $i ]]
then
drush $i command
fi
done
Usando o operador =~
bash.
for i in $(drush site-alias); do
if ! [[ $i =~ \. ]]; then
drush "$i" command
fi
done