Переменные окружения
Окружение/среда (environment) - это набор пар ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ, которые могут использоваться запускаемыми процессами.
Просмотр переменных окружения
Для того чтобы посмотреть свое окружение введите команду без аргументов
как вводить ? и какую ?
в консоли
~# env
для консоли да, но это не переменные окружения )
А что ж это такое? Хрен собачий?
Каждый и любой процесс имеет собственный набор переменных окружения, который он заимствует от родителя, и в который могут вноситься изменения.
ты откуда такой собачий? я в курсе наследований, просто команда следующая
~# env --- не показывает переменных окружения
Идиот!
Читай матчасть...
$ env
(только для этого не обязательны права root)
$ set
ложь
env покажет только среду текущей консоли, но не программы которая будет запущена в этой консоли )
То что тебе мерещится как "среду текущей консоли" - это программное окружение той последней копии bash, которая запущена в этой консоли. Если другая будет "запущена", то она скопирует полную копию окружения из окружения этой программы bash. И так - по цепочке далее: от родителя к потомкам...
Жюстина env покажет только среду текущей консоли, но не программы которая будет запущена в этой консоли )
да уж вы правы
Идиот!
Читай матчасть...
Нормально разговаривать мать не учила?
С дебилами нельзя нормально разговаривать.
Ну, во-первых...
В русском переводе мана по env грубая ошибка :)
Переводится как:
Просто "-" подразумевает -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='Жюстина'
А ещё можно поразвлекаться так:
int main( int argc, char **argv, char **envp ) {
...
}
Программа получает список строк переданной ей копии, своего окружения.
Можно, только в данном случае через функцию нагляднее, чем бегать по "списку" в поисках USER/USER1. Да и списком эту структуру я бы не называл :)
Для того чтобы посмотреть свое окружение введите команду без аргументов
как вводить ? и какую ?
Ну вам же ответили выше:
В консоли (для KDE это Konsole, такое черное окошко с приглашением для ввода)
env
или
printenv
и нажимаете Enter.
А вам оно зачем, если не секрет? Лабораторная работа?)
MacLeod интиресно написали толкова главное чтоб работало !
Оно не для того, чтобы работало. Оно - чтобы понималось, для тех кто запутался/засомневался :)
И что далее делать ?
Отправить комментарий