Что Linux эквивалентен из %username %?
Я должен запустить скрипт на нескольких полях Linux каждые несколько дней. Я сделал .sh файл, и он хорошо работает. Сценарий удаляет некоторые файлы в определенном пути. Проблема состоит в том, что путь включает имя пользователя (не, не в / домой), который отличается на каждой машине.
На данный момент я просто изменил сценарий на каждой машине для соответствия имени пользователя, используемому там. Но я хочу иметь сценарий, который будет работать, не будучи должен изменить его.
Так: Linux имеет такие функции? Понятное дело я уверен, что это делает, Вы новичок....
Переменная среды версии Linux, чтобы относиться к текущему пользователю USER
.
Для получения вывода требуется видеть использование $USER
в команде:
echo $USER
И использовать его в другой строке, такой как путь:
/path/with/$USER/in/it
развернет имя пользователя в строке. Хотя необходимо защитить переменные расширения с фигурными скобками, когда переменная непосредственно рядом с другими символами. Это не столь важно в этом примере, как Пользовательская переменная ограничена неалфавитно-цифровыми символами, но была бы важна в следующем случае:
/path/to/${USER}directory
(Благодаря ByteCommander для подсказки в комментариях)
Другой полезный для знания $HOME
для корневого каталога пользователя.
Мог бы быть протест, если Вы планируете читать $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
$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
Как в других ответах говорится, $USER
обычно набор к названию текущей учетной записи пользователя.
, Но по крайней мере в моей системе (Ubuntu 14.04) $USER
переменная среды не набор для заданий крона. Вместо этого можно использовать $LOGNAME
, который является часть среды для заданий крона.
Согласно environ(7)
страница справочника (тип man environ
для чтения его), $USER
используется BSD-полученными программами, и $LOGNAME
используется Полученными из System V программами. У них должно быть то же значение, если они оба установлены. Существование обоих является историческим несчастным случаем. (Могли быть случаи, где $USER
установлен, и $LOGNAME
не, но я не знаю ни о ком.)
environ
страница справочника также документы много других общих переменных среды. (Это не делает документа весь переменные среды, потому что было бы невозможно сделать так.)