Передать переменную среды из текущей оболочки в модуль systemd

Si no le importa agregar GNU datamash a la mezcla, simplemente puede serializar las entradas y luego cruzarlas:

awk '
  {for (i=2;i<=NF;i++) {split($i,a,"#"); print $1,a[1],a[2]}}' OFS='\t' file | 
  datamash --filler=0 crosstab 1,2 count 3
    Acou    Agly    Bla Elfa    Flq
Item_A: 1   0   1   0   0
Item_B: 1   0   0   1   1
Item_C: 1   0   1   1   1
Item_D: 0   1   1   1   0

Alternativamente, con GNU awk (que permite arreglos multidimensionales):

gawk '
  BEGIN {
    OFS="\t";
    PROCINFO["sorted_in"] = "@ind_str_asc";
  }
  {
    for (i=2;i<=NF;i++) {
      split($i,a,"#"); 
      h[a[1]] = 1;
      t[$1][a[1]] += a[2];
    }
  } 
  END {
    for (j in h) printf("\t%s", j);
    printf "\n";
    for (i in t) {
      printf("%s",i);
      for (j in h) 
        printf("\t%d", j in t[i] ? t[i][j] : 0);
      printf "\n";
    }
  }' file
    Acou    Agly    Bla Elfa    Flq
Item_A: 1   0   5   0   0
Item_B: 1   0   0   2   2
Item_C: 1   0   4   2   2
Item_D: 0   3   4   2   0

5
03.08.2017, 00:01
3 ответа

Вы можете повлиять на глобальную среду systemd для всех будущих команд (до перезагрузки )с помощью

 sudo systemctl set-environment var=value

или если вы уже экспортировали varв свою среду, вы можете использовать

 sudo systemctl import-environment var

После запуска устройства вы можете удалить переменную с помощью unset-environmentаналогичным образом.

Поскольку это глобальный эффект, вам лучше просто записать строку DB_URL=databus.dev.mysite.io:8080в какой-нибудь файл /some/fileи установить EnvironmentFile=/some/fileв вашем устройстве.

Альтернативный метод заключается в использовании модуля шаблона myunit@.service, который запускается с помощью systemctl start myunit@'databus.dev.mysite.io:8080'. Затем вы можете восстановить этот параметр как %iвнутри устройства, например, в секции [Service]со строкой типа:

Environment=DB_URL=%i
21
27.01.2020, 20:33

Как бы то ни было, 50 -systemd -user.sh из самой systemd предоставляет способ импортировать переменные среды DISPLAY и XAUTHORITY, на которые вы можете ссылаться:

#!/bin/sh                                                                                                                                                                                                    

systemctl --user import-environment DISPLAY XAUTHORITY

if command -v dbus-update-activation-environment >/dev/null 2>&1; then 
    dbus-update-activation-environment DISPLAY XAUTHORITY
fi

https://github.com/systemd/systemd/blob/master/xorg/50-systemd-user.sh

1
27.01.2020, 20:33

В случае, если в вашем текущем терминале установлены переменные окружения и вы просто экспортируете их в systemctlс помощью sudo, вы можете использовать

sudo -E  systemctl import-environment <LIST OF ENVIRONMENTS TO BE AVAILABLE FOR SERVICE>
0
27.01.2020, 20:33

Теги

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