Объедините выходы переменных цикла вместе с входными переменными в одну строку [closed]

В этом случае вам придется использовать псевдоним электронной почты.

Причина в том, что domains, Logs и virtualmin-backup - это имена подкаталогов, которые Virtualmin создает под доменом каждого домена, поэтому разрешение имени пользователя с таким же именем приведет к их конфликту.

Обходным решением для этого является создание почтового псевдонима для domains@example.com (на странице Mail Aliases), который перенаправляет на реальный почтовый ящик с другим именем.

Однако в настоящее время в Virtualmin есть ошибка, которая не позволяет использовать эти имена в качестве почтовых псевдонимов - Это ошибка, поскольку должно быть возможно иметь псевдоним с именем domains (или другие зарезервированные имена).

Failed to save alias : Missing or invalid alias name (no @ should be included)

Это должно быть исправлено в ближайшем выпуске.

Source - https://www.virtualmin.com/node/40377

3
14.08.2016, 22:20
2 ответа

Я сделал отдельный пример для $ var1 и $ var2 :

#!/bin/bash

var1=$(for i in 1 2 3 4; do echo "a$i b$i  user$i"; done)
echo "$var1"

var2=$(for i in 1 2 3 4; do echo "user$i"; done)
echo "$var2"

for i in $var2
do
  j=$((j+1))
  line=$(echo "$var1" | head -n $j | tail -n 1)
  printf "%s  %s\n" "$line" "$(echo ldap result for $i)"
done

Это выводит:

a1 b1  user1
a2 b2  user2
a3 b3  user3
a4 b4  user4
user1
user2
user3
user4
a1 b1  user1  ldap result for user1
a2 b2  user2  ldap result for user2
a3 b3  user3  ldap result for user3
a4 b4  user4  ldap result for user4

В строке printf просто замените echo ldap result на команду $ i нужной командой, например ldapsearch -xyx $ i .

Примечание: с zsh (вместо bash) это может быть даже немного проще из-за поддержки массивов.

Альтернативное решение, основанное на команде paste (хотя интервал менее управляем):

#!/bin/bash

var1=$(for i in 1 2 3 4; do echo "a$i b$i  user$i"; done)
echo "$var1"

var2=$(for i in 1 2 3 4; do echo "user$i"; done)
echo "$var2"

for i in $var2
do
  echo "ldap result for $i"
done | paste <(echo "$var1") -
1
27.01.2020, 21:30

Делайте все в цикле:

while read -r serv addr load tty usr; do
   printf "%s %s %s %s %s %s\n" \
      "${serv}" "${addr}" "${load}" "${tty}" "${usr}" $(ldapsearch -xyx "${usr}")
done < <( some command together )

С помощью <<(некоторые команды вместе) вы перенаправляете вывод некоторой команды вместе в цикл while.

0
27.01.2020, 21:30

Теги

Похожие вопросы