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

Что Linux эквивалентен из %username %?

Я должен запустить скрипт на нескольких полях Linux каждые несколько дней. Я сделал .sh файл, и он хорошо работает. Сценарий удаляет некоторые файлы в определенном пути. Проблема состоит в том, что путь включает имя пользователя (не, не в / домой), который отличается на каждой машине.

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

Так: Linux имеет такие функции? Понятное дело я уверен, что это делает, Вы новичок....

5
задан 25 July 2016 в 11:41

4 ответа

Переменная среды версии Linux, чтобы относиться к текущему пользователю USER.

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

echo $USER

И использовать его в другой строке, такой как путь:

/path/with/$USER/in/it

развернет имя пользователя в строке. Хотя необходимо защитить переменные расширения с фигурными скобками, когда переменная непосредственно рядом с другими символами. Это не столь важно в этом примере, как Пользовательская переменная ограничена неалфавитно-цифровыми символами, но была бы важна в следующем случае:

/path/to/${USER}directory

(Благодаря ByteCommander для подсказки в комментариях)

Другой полезный для знания $HOME для корневого каталога пользователя.

11
ответ дан 23 November 2019 в 08:35

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

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

$ echo $USER
bytecommander

$ sudo echo $USER
bytecommander

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

  • Выполнение bash интерпретатор как корень и передача это команда, которая содержит $USER. Необходимо удостовериться, что команда включается с одинарными кавычками, чтобы препятствовать тому, чтобы текущий интерпретатор Bash делал переменное расширение:

    sudo bash -c 'echo $USER'
    
  • Использование команда производится вместо $USER переменная среды.

    существует главным образом две команды, которые были бы полезны здесь, whoami и id -un:

    $ whoami
    bytecommander
    
    $ sudo whoami
    root
    
    $ id -un
    bytecommander
    
    $ sudo id -un
    root
    
    [еще 1125] информация о тех командах может быть найдена путем ввода man whoami и man id.

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

cd /path/to/$(whoami)folder
cd /path/to/$(id -un)folder
9
ответ дан 23 November 2019 в 08:35
$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 November 2019 в 08:35

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

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

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

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

4
ответ дан 23 November 2019 в 08:35

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

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