Переменные окружения ?

Переменные окружения

Окружение/среда (environment) - это набор пар ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ, которые могут использоваться запускаемыми процессами.
Просмотр переменных окружения

Для того чтобы посмотреть свое окружение введите команду без аргументов

как вводить ? и какую ?

0
lord_i - 4 Октябрь, 2019 - 12:31
Изображение пользователя lord_i.

в консоли

~# env

0
Жюстина - 4 Октябрь, 2019 - 22:56
Изображение пользователя Жюстина.

для консоли да, но это не переменные окружения )

-2
Olej - 4 Октябрь, 2019 - 23:47

но это не переменные окружения )
А что ж это такое? Хрен собачий?

Каждый и любой процесс имеет собственный набор переменных окружения, который он заимствует от родителя, и в который могут вноситься изменения.

0
Жюстина - 5 Октябрь, 2019 - 00:07
Изображение пользователя Жюстина.

ты откуда такой собачий? я в курсе наследований, просто команда следующая

~# env --- не показывает переменных окружения

-3
Olej - 5 Октябрь, 2019 - 13:33

Идиот!
Читай матчасть...

0
Olej - 4 Октябрь, 2019 - 23:49

как вводить ? и какую ?
$ env
(только для этого не обязательны права root)
$ set

0
Жюстина - 5 Октябрь, 2019 - 00:09
Изображение пользователя Жюстина.

ложь

0
Жюстина - 5 Октябрь, 2019 - 00:16
Изображение пользователя Жюстина.

env покажет только среду текущей консоли, но не программы которая будет запущена в этой консоли )

0
Olej - 5 Октябрь, 2019 - 13:38

То что тебе мерещится как "среду текущей консоли" - это программное окружение той последней копии bash, которая запущена в этой консоли. Если другая будет "запущена", то она скопирует полную копию окружения из окружения этой программы bash. И так - по цепочке далее: от родителя к потомкам...

0
Denes - 9 Октябрь, 2019 - 23:45

Жюстина env покажет только среду текущей консоли, но не программы которая будет запущена в этой консоли )

да уж вы правы

-4
Olej - 5 Октябрь, 2019 - 13:34

Идиот!
Читай матчасть...

+1
darkfine313 - 5 Октябрь, 2019 - 21:04
Изображение пользователя darkfine313.

Нормально разговаривать мать не учила?

-3
Olej - 6 Октябрь, 2019 - 15:36

С дебилами нельзя нормально разговаривать.

+1
MacLeod - 9 Октябрь, 2019 - 17:59
Изображение пользователя MacLeod.

Ну, во-первых...
В русском переводе мана по env грубая ошибка :)

A mere - implies -i.
Переводится как:
Просто "-" подразумевает -i.
Но не
"Без параметров считается запущенной с ключом -i."
Масштаб трагедии OpenNET, WikiPedia...

Примеры:
env -
env - ls

Собственно, сама проверка из coreutils-8.30/src/env.c, строка 584:
if (optind < argc && STREQ (argv[optind], "-"))
{
    ignore_environment = true;
    ++optind;
}

где STREQ макрос на обычный strcmp.

Во-вторых, env хоть и предназначена для запуска программы с измененным окружением, тем не менее:
а) запущенная без команды выводит измененное окружение;
б) если окружение не изменялось, выводит какое есть.
Следовательно, выводит текущие переменные окружения.

Это может проверить любой, выполнив сохранение в файл вывод обеих команд
printenv > printenv.txt
env > env.txt

И сравнив их построчно:
diff env.txt printenv.txt
Выхлоп:
70c70
< _=/usr/bin/env
---
> _=/usr/bin/printenv

Различия только в имени исполняемой программы.

И для понимания. Пишем нехитрую утилиту:
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char* argv[])
{
    const char *name = "USER", *name1 = "USER1";
    char *user = getenv(name);
    char *user1 = getenv(name1);
    printf("%s='%s'\n%s='%s'\n", name, user, name1, user1);
    return 0;
}

Которая выводит две переменные окружения (USER и USER1), чтобы нас уж точно никто не обманул.
Сохраняем в main.c, компилим
gcc main.c
Развлекаемся:
max@home:~/Work/kubuntu/env$ env | grep USER
USER=max
max@home:~/Work/kubuntu/env$ ./a.out
USER='max'
USER1='(null)'
max@home:~/Work/kubuntu/env$ env ./a.out
USER='max'
USER1='(null)'
max@home:~/Work/kubuntu/env$ export USER1="Жюстина"
max@home:~/Work/kubuntu/env$ ./a.out
USER='max'
USER1='Жюстина'
max@home:~/Work/kubuntu/env$ env ./a.out
USER='max'
USER1='Жюстина'
max@home:~/Work/kubuntu/env$ env | grep USER
USER1=Жюстина
USER=max
max@home:~/Work/kubuntu/env$ ./a.out
USER='max'
USER1='Жюстина'
max@home:~/Work/kubuntu/env$ env ./a.out
USER='max'
USER1='Жюстина'
max@home:~/Work/kubuntu/env$ env - ./a.out
USER='(null)'
USER1='(null)'
max@home:~/Work/kubuntu/env$ env -i ./a.out
USER='(null)'
USER1='(null)'
max@home:~/Work/kubuntu/env$ env USER=Жюстина ./a.out
USER='Жюстина'
USER1='Жюстина'
max@home:~/Work/kubuntu/env$ env ./a.out
USER='max'
USER1='Жюстина'
max@home:~/Work/kubuntu/env$ env USER=Жюстина USER1=Olej ./a.out
USER='Жюстина'
USER1='Olej'
max@home:~/Work/kubuntu/env$ ./a.out
USER='max'
USER1='Жюстина'
max@home:~/Work/kubuntu/env$ env ./a.out
USER='max'
USER1='Жюстина'

0
Olej - 9 Октябрь, 2019 - 18:54

Пишем нехитрую утилиту:
А ещё можно поразвлекаться так:
int main( int argc, char **argv, char **envp ) {
...
}

Программа получает список строк переданной ей копии, своего окружения.

0
MacLeod - 9 Октябрь, 2019 - 20:08
Изображение пользователя MacLeod.

Можно, только в данном случае через функцию нагляднее, чем бегать по "списку" в поисках USER/USER1. Да и списком эту структуру я бы не называл :)

0
Denes - 9 Октябрь, 2019 - 23:44

Для того чтобы посмотреть свое окружение введите команду без аргументов

как вводить ? и какую ?

0
MacLeod - 10 Октябрь, 2019 - 12:42
Изображение пользователя MacLeod.

Ну вам же ответили выше:
В консоли (для KDE это Konsole, такое черное окошко с приглашением для ввода)
env
или
printenv
и нажимаете Enter.

А вам оно зачем, если не секрет? Лабораторная работа?)

0
Denes - 9 Октябрь, 2019 - 23:45

MacLeod интиресно написали толкова главное чтоб работало !

0
MacLeod - 10 Октябрь, 2019 - 12:43
Изображение пользователя MacLeod.

Оно не для того, чтобы работало. Оно - чтобы понималось, для тех кто запутался/засомневался :)

0
Denes - 11 Октябрь, 2019 - 00:06

И что далее делать ?

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры