Debian 6.0 является (в настоящее время стабильное) Сжатие; Lenny был 5.0 (в настоящее время oldstable). Я предположу, что Вы имели в виду, Сжимают.
Используйте способное прикрепление для безопасного добавления Хрипящий (в настоящее время тестирующий) к Вашему sources.list
, затем установка gcc-4.7/wheezy.
Другими словами, Ваш /etc/apt/sources.list
должен выглядеть примерно так:
deb local.debian.mirror squeeze main deb local.debian.mirror wheezy main
в то время как Ваш /etc/apt/preferences
должен выглядеть примерно так:
Package: * Pin: release n=squeeze Pin-Priority: 900 Package: * Pin: release n=wheezy Pin-Priority: 200
(Точные числа не имеют значения слишком много; посмотрите человека 5 apt_preferences для получения дополнительной информации о том, что означают различные диапазоны.)
Это будет препятствовать тому, чтобы пакеты тестирования были неумышленно установлены. (Конечно, Вы могли просто обновить свою целую систему до тестирования.)
Можно получить некоторые ошибки разрешения с apt-get install gcc-4.7/testing
поскольку это будет иметь зависимости, которые требуют версий, больше, чем стабильный; apt-get --target-release testing install gcc-4.7
установит тестирование на приоритет 990 на время команды.
Среда является списком строк, проведенных execve
системный вызов, точно так же, как список аргументов. Период. То, что приложения делают с тем списком строк, которые он получает, до приложения.
Теперь, условно, тот список обычно используется по-другому по сравнению со списком аргументов. Программы обычно помнят список переменных среды, они получают и снова используют то же при выполнении другой команды.
У них есть библиотечные функции C для помощи им делающий это: среда сделана доступной как a environ
переменная, и можно получить и изменить тот список (копия списка переменных среды, которые это получило) с getenv
, setenv
, putenv
, и функции как execvp
, execl
, system
, popen
... используйте это environ
переменная при выполнении команд (вызов execve
с environ
они отслеживают).
Теперь приложения не должны использовать тот API. Они могут использовать свой собственный способ управлять списком переменных среды. Оболочки, например, переменные среды карты для окружения переменных и вероятны не использовать putenv/setenv libc функции. perl
имеет %ENV
ассоциативный массив и так далее.
Можно всегда использовать gdb
присоединить к процессу и заставить его звонить system("env > /tmp/some-file")
(принятие, они динамично связаны с libc), но у Вас нет гарантии это env
получит ту же среду, чем другая команда добралась бы, если бы команда, к которой Вы присоединяете, выполнялась, она ее собственным способом (думайте об оболочках, например). (также отметьте это system()
запускает оболочку (для интерпретации командной строки), и оболочки могут изменить свою среду на запуске (попытка, например, env -i sh -c env
).
$ sleep 100 &
[1] 17098
$ gdb --pid=$! /bin/sleep
[...]
(gdb) p environ[0]
$1 = 0x7fffd722d227 "STY=7498.pts-0.hostname"
(gdb) p environ[1]
$2 = 0x7fffd722d245 "TERM=screen-bce"
(gdb) call system("env > /tmp/some-file")
$4 = 0
(gdb) detach
Detaching from program: /bin/sleep, process 17098
(gdb) quit
$ cat /tmp/some-file
GNOME_KEYRING_PID=6850
SSH_AGENT_PID=6844
SHLVL=1
[...]
Если Вы запускаете Linux или одного из Unixe, который имеет a /proc
файловая система, среда процесса находится в одном из файлов для каждого процесса под /proc
. У меня нет доступа к машине Соляриса прямо сейчас, но для Linux это работало:
$ tr '\0' '\n' < /proc/$$/environ
Это печатает переменные среды текущей оболочки, но $$
может быть любой идентификатор процесса, к которому Ваш идентификатор пользователя имеет доступ.
Был способ сделать это в соответствии с Солярисом, но это было намного более сложно. Я думаю, что BSDs имеют a /proc
более подобный Linux.
/proc/.../environ
только включает начальную среду, OP просит текущую среду... Как примечание стороны - на Солярисе, pargs
(и ucb/ps
) на самом деле поиск текущая среда в адресном пространстве (/proc/.../as
) из процесса.
– maxschlepzig
17.09.2013, 12:58