Каковы основные отличия между $ENV_VAR и 'env_var'?

Похоже, что что-то могло бы быть mislabeled. Вы попытались работать restorecon -R /var/lib/mysql?

1
03.01.2012, 18:36
2 ответа

Переменная среды установлена раз и навсегда (для данного процесса; когда процесс запускает другого, ребенок наследовал среду родителя). Так доступ $HOSTNAME непосредственно читает значение в памяти. Напротив, каждый раз Вы оцениваете замену команды `hostname` (также записанный $(hostname)), это выполняется hostname команда.

В случае $HOSTNAME и hostname, на практике это не имеет никакого значения. $HOSTNAME незначительно быстрее. В принципе, $HOSTNAME может быть неправильным, если Вы работали HOSTNAME=some_bogus_value (тогда как $(hostname) может быть неправильным, если Вы помещаете некоторых отличающихся hostname программа на Вашем $PATH), и только hostname в курсе, если Вы изменяете свое имя хоста.

Часто существует (но не всегда) a HOSTNAME переменная среды, потому что это часто использовало (например, в приглашениях оболочки) и почти никогда не изменяется. Существует a hostname команда (в большинстве систем) для устанавливания значения HOSTNAME (HOSTNAME=$(hostname)) и изменить имя хоста (hostname $(cat /etc/hostname), обычно сделанный рано в процессе начальной загрузки).

2
27.01.2020, 23:17
  • 1
    Gilles просто слишком хорош, чтобы быть простым!! Я просто желаю им Бронзы, Золота, Серебряных значков, столько, сколько Вы щеголяете на моем имени. ;-) –  Nikhil Mulley 04.01.2012, 17:30

Уместно зависеть от команд, которые выбирают текущее значение, чем переменные, которые могут стать устаревшими в течение времени на необслуживаемых сессиях.

[centos@abc ~]$ /bin/hostname
abc.dns.com
[centos@abc ~]$ echo $HOSTNAME
abc.dns.com
[centos@abc ~]$ uname -n
abc.dns.com

[centos@abc ~]$ sudo /bin/hostname xyz.dns.coom
[centos@abc ~]$ uname -n
xyz.dns.coom
[centos@abc ~]$ /bin/hostname
xyz.dns.coom
[centos@abc ~]$ echo $HOSTNAME
abc.dns.com
[centos@abc ~]$ 

Я думаю его ясное это $HOSTNAME переменная оболочки, которая расширена/оценена путем получения вывода /bin/hostname в начале инициализации оболочки и не обновленного каждый раз или если имя хоста является динамичным. В зависимости от вывода /bin/hostname более надежно, чем $HOSTNAME, если это не тот же сценарий или программа, которая уже оценила название хоста в том же пространстве программы.

Ну, короче говоря, вывод команд /bin/hostname или /bin/uname -m более соответствующий метод должен знать имя хоста, чем просто использование $HOSTNAME (который мог стать устаревшим как любая другая нормальная переменная SHELL).

Если Вам любопытно знать, как действительно окружает, наследовали $HOSTNAME, то его надлежащее, чтобы знать, что оболочка читает свою глобальную инициализацию (дистанционное управление) файлы как/etc/profile (или/etc/bashrc), из которого эта переменная определила от снова вывода /bin/hostname .

(Также важно знать что программы кроме оболочки без предшествующего выполнения /bin/hostname команде можно было определить/инициализировать переменную ИМЕНИ ХОСТА из-за системного названного сценария запуска /etc/rc.sysinit )

3
27.01.2020, 23:17
  • 1
    Хорошее объяснение. Можно ли включать сравнение hostname к $HOSTNAME и использованию полного пути? –  Michael 04.01.2012, 00:57

Теги

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