установить переменные среды из stdout

Современный способ сделать это - использовать команду ip . Например, в моей системе с активным беспроводным подключением я получаю:

$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:26:b9:dd:2c:28 brd ff:ff:ff:ff:ff:ff
3: wlp3s0b1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether c4:46:19:5f:dc:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.4/24 brd 192.168.1.255 scope global wlp3s0b1                            
       valid_lft forever preferred_lft forever
    inet6 fe80::c646:19ff:fe5f:dcf5/64 scope link
       valid_lft forever preferred_lft forever
16: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
    link/none
    inet 123.167.217.2/24 brd 123.167.217.255 scope global tun0                            
       valid_lft forever preferred_lft forever

Активные интерфейсы имеют как запись inet , так и широковещательный ( brd ) адрес. { {1}} Вы можете отобразить все такие интерфейсы с помощью:

$ ip addr show | awk '/inet.*brd/{print $NF}'
wlp3s0b1
tun0

Если вам нужен только один, вы можете получить первый (только) с помощью:

$ ip addr show | awk '/inet.*brd/{print $NF; exit}'
wlp3s0b1

Оператор exit сообщает awk , чтобы остановить поиск после обнаружения первого совпадения.

4
24.06.2016, 01:03
2 ответа

Вы можете использовать eval :

$ set -a
$ eval "$(command_that_generate_output)"
$ set +a
$ sh -c 'printf "%s\n" "$DATABASE_URL"'
someurl
7
27.01.2020, 20:48
$ export $( generate_env )

Это создаст экспортируемые переменные, используя данные, сгенерированные generate_env.

Testing:

$ cat myenv
A=1
B=2
PIZZA=now

$ export $( cat myenv )

$ echo $PIZZA
now

$ echo $B
2
3
27.01.2020, 20:48

Теги

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