Linux переменная имени пользователя

Environment Variable for Username

What is the Linux equivalent of %username%? I need to run a script on multiple Linux boxes every few days. I made a .sh file, and it works fine. The script deletes some files at a certain path. Problem is that the path includes the username (no, not in /home), which is different on each machine. For now, I simply modified the script on each machine to match the username used there. But I want to have a script that will work, without needing to modify it. So: does Linux have such functions? Duh, I’m sure it does, you noob.

That depends, what does %username% mean? I guess it’s some sort of Windows thing, but don’t assume we’ll know what it is. We’re Linux people here, and most of us know very little about Windows. Please edit your question and explain what you need.

I’ve edited the title for this (pending peer review). You’re not asking about a «wildcard»; %username% is a Windows environment_variable, and you’re asking about the Linux equivalent, (which is also an environment variable).

It’d be marvellous if you could accept whichever answer you found most helpful, to round of the Q&A format nicely.

@Arronical true. Honestly, I didn’t read any of the other answers and comments. I feel that everything added after your answer fails to realize the background to my question. Once the flood started, I didn’t care about this thread anymore. I rarely interact with any of the SE sites (posts, answers or comments). About 90% of the times that I did, I hated what followed and disliked SE a little more. I like to read posts and discussions, but there’s a certain square-headedness to SE overall, I feel. There are plenty of other highly professional forums that I like (Spiceworks, LinkedIn groups).

4 Answers 4

The Linux version environment variable to refer to the current user is USER .

To get the output you’d like to see use $USER in your command:

And to use it in another string such as a path:

Will expand the username within the string. Though you should protect variable expansions with curly braces when a variable is directly next to other characters. It’s not so important in this example as the USER variable is bounded by non-alphanumeric characters, but would be important in the following case:

(Thanks to ByteCommander for the tip in comments)

Читайте также:  Linux ntp not syncing

Another useful one to know is $HOME for the user’s home directory.

will change it into your username.

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

To list the current values of all environment variables:

Keep in mind that variable names are case-sensitive

To expand on this. You can create your own too:

will create $var with value.

$ export var=1111 rinzwind@schijfwereld:~$ echo $var 1111 

Note that export is only necessary if you want child processes to also see the variable and its value. If it’s only being used in the current process a simple assignment is sufficient. Also, you should quote variables when they are evaluated: echo «$var»

There might be a caveat if you plan to read the $USER environment variable in a command starting with sudo .

Bash variable expansion takes place before executing sudo to switch users, that means the $USER variable gets read from the current environment before sudo switches to root.

$ echo $USER bytecommander $ sudo echo $USER bytecommander 

If this is not intended and you require a method that will return the name of the user as whom it really runs (normally «root»), you have at least three options to achieve that:

    Run a bash interpreter as root and pass it the command which contains $USER . You must make sure that the command is enclosed with single quotes to prevent the current Bash interpreter from doing the variable expansion:

$ whoami bytecommander $ sudo whoami root $ id -un bytecommander $ sudo id -un root 

You can use these commands like a variable and embed them into a string (e.g. a directory path) like this, using Bash’s command substitution syntax. Here are two examples which cd into a directory named after the current user:

cd /path/to/$(whoami)folder cd /path/to/$(id -un)folder 

Источник

Переменные окружения в Linux

Переменные окружения (или переменные среды) — это набор пар ключ-значение, которые хранятся в вашем Linux и используются процессами для выполнения определенных операций. Они отвечают за стандартное поведение системы и приложений. При взаимодействии с вашим сервером через сеанс оболочки, есть много информации, которую ваша оболочка обрабатывает, чтобы определить ее поведение и доступы. Некоторые из этих параметров содержатся в настройках конфигурации, а другие определяются пользовательским вводом. Оболочка отслеживает все эти параметры и настройки через окружение. Окружение — это область, которую оболочка создает каждый раз при запуске сеанса, содержащего переменные, определяющие системные свойства. Например, это может быть часовой пояс в системе, пути к определенным файлам, приложения по-умолчанию, локали и многое другое. Переменные окружения также могут использоваться в программах оболочки или в подоболочках для выполнения различных операций.

Читайте также:  Astra linux cuda install

Переменные имеют следующий формат:

KEY=value KEY="Some other value" KEY=value1:value2

Должны соблюдаться следующие правила:

  • Имена переменных чувствительны к регистру (регистрозависимы). Переменные окружения должны быть написаны большими буквами (UPPER CASE).
  • Несколько значений переменных разделяются двоеточием :
  • Вокруг символа = нет пробела

Переменные можно разделить на две категории:

  • Переменные окружения (Environmental Variables) — это переменные, которые определены для текущей оболочки и наследуются любыми дочерними оболочками или процессами. Переменные окружения используются для передачи информации в процессы, которые порождаются из оболочки.
  • Переменные оболочки (Shell Variables) — это переменные, которые содержатся исключительно в оболочке, в которой они были установлены или определены. Они часто используются для отслеживания эфемерных данных, например, текущего рабочего каталога.

Список всех переменных окружения и оболочки

Мы можем увидеть список всех наших переменных окружения, используя команды env или printenv. В состоянии по умолчанию они должны работать точно так же:

SHELL=/bin/bash TERM=xterm USER=demouser LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca. MAIL=/var/mail/demouser PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games PWD=/home/demouser LANG=en_US.UTF-8 SHLVL=1 HOME=/home/demouser LOGNAME=demouser LESSOPEN=| /usr/bin/lesspipe %s LESSCLOSE=/usr/bin/lesspipe %s %s _=/usr/bin/printenv

Это типичный вывод как для env, так и для printenv. Разница между этими двумя командами проявляется только в их более конкретной функциональности. Например, с помощью printenv вы можете запросить значения отдельных переменных:

А как посмотреть переменные оболочки?

Для этого можно использовать команду set. Если мы введем set без каких-либо дополнительных параметров, мы получим список всех переменных оболочки, переменных окружения, локальных переменных и функций оболочки:

BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() . . .

Посмотрим на общий набор переменных окружения, которые вы можете найти в своей системе.

  • USER: текущее имя пользователя, использующего систему
  • HOME: домашний каталог текущего пользователя
  • PATH: список каталогов, разделенных двоеточиями, в которых система ищет команды
  • PWD: текущий рабочий каталог
  • _: самая последняя команда, выполненная в системе пользователем
  • MAIL: путь к почтовому ящику текущего пользователя
  • SHELL: оболочка, используемая для интерпретации команд в системе, она может быть много разных (например, bash, sh, zsh или другие)
  • LANG: кодировка языка, используемая в системе
  • HISTFILESIZE: количество строк истории команд, сохраненных в файле истории
  • HISTSIZE: количество строк истории, разрешенных в памяти
  • UID: текущий UID для пользователя
  • HOSTNAME: имя компьютера системы
  • TERM: указывает тип терминала
  • OLDPWD: предыдущий рабочий каталог
  • BASHOPTS: список параметров, которые использовались при выполнении bash
  • BASH_VERSION: версия bash, выполняемая в удобочитаемой форме
  • BASH_VERSINFO: версия bash с машиночитаемым выводом
  • COLUMNS: Количество столбцов в ширину, которые используются для вывода вывода на экран
  • DIRSTACK: стек каталогов, доступных с помощью команд pushd и popd
  • IFS: внутренний разделитель полей для разделения ввода в командной строке. По умолчанию это пробел
  • SHELLOPTS: параметры оболочки, которые можно установить с помощью параметра set
Читайте также:  Linux remove first line from file

Установка переменных окружения

В Linux у вас есть много разных способов установки переменных окружения в зависимости от того, хотите ли вы сделать их постоянными или нет.

Самый простой способ установить переменные окружения — использовать команду export.

Для примера создадим новую переменную, а затем экспортируем ее.

Чтобы создать новую переменную оболочки с именем NEW_VARIABLE и значением «test», и затем сразу экспортировать ее введите:

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

Постоянные переменные окружения

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

— Использование файла .bashrc

Самый популярный способ постоянной установки переменных среды — это добавить их в файл .bashrc.

Файл .bashrc — это скрипт, выполняемый всякий раз, когда вы инициализируете сеанс интерактивной оболочки. Как следствие, когда вы запускаете новый терминал через интерфейс GNOME или просто используете screen сессию, вы будете использовать файл .bashrc.

Например, добавьте следующие записи в ваш файл .bashrc:

Сохраните ваш файл и используйте команду source для перезагрузки файла bashrc для текущего сеанса оболочки.

Отлично, ваши изменения теперь сохраняются после перезагрузки оболочки или системы!

— Использование файла .bash_profile

В качестве альтернативы, если вы планируете подключаться к своим сеансам с помощью login оболочек, вы также можете добавить переменные окружения непосредственно в файл .bash_profile.

export TZ="America/New_York" source ~/.bash_profile

Сбросить переменные окружения

Теперь, когда вы установили много переменных окружения в своей системе, вы можете отменить некоторые из них, если вы больше не используете их. В Linux существует два способа сброса переменных окружения: с помощью команды unset или путем удаления записей переменных в ваших системных файлах.

— Использование команды unset

Чтобы удалить переменную окружения, используйте команду unset со следующим синтаксисом:

unset USERNAME printenv USERNAME

— Использование команды set -n

Кроме того, вы можете сбросить переменные окружения, используя команду set с флагом -n.

set -n USERNAME printenv USERNAME

Источник

Оцените статью
Adblock
detector