Переменная среды для имени пользователя

В этом случае я узнал, почему Apache не запускается. Я не мог найти след этого в журналах автозагрузки, только на выходе, напечатанном на экране при загрузке.

Но здесь вы идете: последняя строка в скрипте /etc/apache2/apache2.conf не удалась. [!d1 ]

Почему?

В нем написано:

Include sites-enabled/

Однако два из сайтов, которые я установил, находятся в моем собственном доме каталог, который зашифрован!

Итак, при загрузке (во время запуска Apache) эти сайты не существуют, и Apache не работает и отказывается запускаться.

Решение? [!d7 ]

Я создал небольшой скрипт под названием «disable_sites» и символически привязал его к /etc/rc0.d и /etc/rc6.d (shutdown and reboot):

#!/bin/bash

/usr/sbin/a2dissite vvsshop
/usr/sbin/a2dissite neoflex
/etc/init.d/apache2 reload

exit 0

Я также создал сценарий, разрешать сайты, когда я вхожу в систему, и добавлять его в качестве начальной программы в свои настройки системы. Итак, теперь это работает!

Итак, я полагаю, урок здесь заключается в том, что, когда Apache необъяснимо не загружается во время загрузки, вы не можете найти никаких ошибок в журналах или при запуске сервера вручную, проверьте, все ли требуемые каталоги доступны. Возможно, это также можно было бы решить другим способом.

1
задан 25 July 2016 в 21:41

3 ответа

$USER

изменит его на ваше имя пользователя.

Пример

rinzwind@schijfwereld:~$ echo $USER
rinzwind

Есть еще ...

~$ cd /tmp
:/tmp$ echo $HOME
/home/rinzwind
:/tmp$ echo $PWD
/tmp
$ echo $HOSTNAME
schijfwereld

Чтобы отобразить текущие значения всех переменных среды:

env

Имейте в виду, что имена переменных чувствительны к регистру

Чтобы расширить это. Вы также можете создать свой собственный:

export var=value

создаст $ var со значением.

$ export var=1111
rinzwind@schijfwereld:~$ echo $var
1111
11
ответ дан 23 May 2018 в 07:48
  • 1
    Чувствительность к регистру - очень хороший момент для поднятия с кем-то, исходящим из фона MS. – Arronical 25 July 2016 в 18:29
  • 2
    Обратите внимание, что export необходимо, только если вы хотите, чтобы дочерние процессы также видели переменную и ее значение. Если он используется только в текущем процессе, достаточно простого назначения. Кроме того, вы должны указывать переменные при их оценке: echo "$var" – Dennis Williamson 25 July 2016 в 23:34

Может возникнуть оговорка, если вы планируете читать переменную среды $USER в команде, начиная с sudo.

Расширение переменной Bash происходит до запуска sudo для переключения пользователей, это означает, что переменная $USER считывается из текущей среды до того, как sudo переключится на root.

$ echo $USER
bytecommander

$ sudo echo $USER
bytecommander

Если это не предназначено, и вам нужен метод, который вернет имя пользователя, которого он действительно запускает (обычно «root»), у вас есть как минимум три варианта для этого:

Run интерпретатор bash как root и передайте ему команду, которая содержит $USER. Вы должны убедиться, что команда заключена в одинарные кавычки, чтобы предотвратить интерпретацию текущего интерпретатора Bash:
sudo bash -c 'echo $USER'
Использовать вывод команды вместо переменной среды $USER. Здесь есть, в основном, две команды, whoami и id -un:
$ whoami
bytecommander

$ sudo whoami
root

$ id -un
bytecommander

$ sudo id -un
root
Более подробную информацию об этих командах можно найти, набрав man whoami и man id.

Вы можете использовать эти команды как переменную и вставлять их в строку (например, путь к каталогу), как это, используя синтаксис подстановки команды Bash. Вот два примера, которые cd относятся к директории, названной в честь текущего пользователя:

cd /path/to/$(whoami)folder
cd /path/to/$(id -un)folder
9
ответ дан 23 May 2018 в 07:48
  • 1
    [F1] то же самое, что и id -un? – wjandrea 25 July 2016 в 20:26
  • 2
    конечный результат: P – Rinzwind 25 July 2016 в 22:20
  • 3
    sudo echo $USER не отображает bytecommander, поскольку sudo сохраняет переменные среды - на самом деле, sudo отбрасывает большинство переменных среды, которые он явно не настроил для сохранения. Причина sudo echo $USER показывает bytecommander в том, что подстановка переменной выполняется оболочкой до того, как результат будет передан в sudo; это эквивалентно sudo echo bytecommander в вашем случае. Попробуйте sudo sh -c 'echo $USER'. – Stuart Olsen 25 July 2016 в 23:20
  • 4
    @StuartOlsen Большое спасибо за исправление моей ошибки, вы, конечно, правы. Я заметил это неправильно. Не могли бы вы еще раз рассмотреть мой обновленный и исправленный ответ? – Byte Commander 26 July 2016 в 01:47

Как говорят другие ответы, $USER обычно устанавливается на имя текущей учетной записи пользователя.

Но, по крайней мере, в моей системе (Ubuntu 14.04) переменная среды $USER имеет значение [d1 ] обычно установлен для заданий cron. Вместо этого вы можете использовать $LOGNAME, который является частью среды для заданий cron.

Согласно man_странице environ(7) (тип man environ для ее чтения), $USER используется BSD-производные программы и $LOGNAME используются программами, созданными System-V. Они должны иметь такое же значение, если они оба установлены. Существование обоих - историческая катастрофа. (Там могут быть случаи, когда $USER установлен, а $LOGNAME - нет, но я ничего не знаю.)

Страница руководства environ также документирует ряд других общих условий переменные. (Он не документирует переменные среды , потому что это невозможно сделать.)

3
ответ дан 23 May 2018 в 07:48

Другие вопросы по тегам:

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