Arr*_*cal 14
引用当前用户的 Linux 版本环境变量是USER
.
要获得您希望$USER
在命令中使用的输出:
echo $USER
Run Code Online (Sandbox Code Playgroud)
并在另一个字符串(例如路径)中使用它:
/path/with/$USER/in/it
Run Code Online (Sandbox Code Playgroud)
将在字符串中扩展用户名。虽然当一个变量直接紧挨着其他字符时,你应该用花括号保护变量扩展。在这个例子中它并不重要,因为 USER 变量受非字母数字字符的限制,但在以下情况下很重要:
/path/to/${USER}directory
Run Code Online (Sandbox Code Playgroud)
(感谢 ByteCommander 在评论中提供提示)
另一个有用的信息是$HOME
用户的主目录。
Rin*_*ind 12
$USER
Run Code Online (Sandbox Code Playgroud)
将其更改为您的用户名。
例子
rinzwind@schijfwereld:~$ echo $USER
rinzwind
Run Code Online (Sandbox Code Playgroud)
还有更多...
~$ cd /tmp
:/tmp$ echo $HOME
/home/rinzwind
:/tmp$ echo $PWD
/tmp
$ echo $HOSTNAME
schijfwereld
Run Code Online (Sandbox Code Playgroud)
列出所有环境变量的当前值:
env
Run Code Online (Sandbox Code Playgroud)
请记住,变量名称区分大小写
对此进行扩展。您也可以创建自己的:
export var=value
Run Code Online (Sandbox Code Playgroud)
将创建具有价值的 $var。
$ export var=1111
rinzwind@schijfwereld:~$ echo $var
1111
Run Code Online (Sandbox Code Playgroud)
如果您打算$USER
在以sudo
.
Bash 变量扩展发生在执行sudo
切换用户之前,这意味着$USER
变量在sudo
切换到 root之前从当前环境中读取。
$ echo $USER
bytecommander
$ sudo echo $USER
bytecommander
Run Code Online (Sandbox Code Playgroud)
如果这不是预期的,并且您需要一个方法来返回它实际运行的用户的名称(通常是“root”),您至少有三个选项来实现:
bash
以 root 身份运行解释器并将包含$USER
. 您必须确保命令用单引号括起来,以防止当前的 Bash 解释器进行变量扩展:
sudo bash -c 'echo $USER'
Run Code Online (Sandbox Code Playgroud)使用命令输出而不是$USER
环境变量。
主要有两个命令在这里很有用,whoami
以及id -un
:
$ whoami
bytecommander
$ sudo whoami
root
$ id -un
bytecommander
$ sudo id -un
root
Run Code Online (Sandbox Code Playgroud)
可以通过键入man whoami
和找到有关这些命令的更多信息man id
。
您可以像使用变量一样使用这些命令,并使用 Bash 的命令替换语法将它们嵌入到这样的字符串(例如目录路径)中。以下是两个示例,它们cd
进入以当前用户命名的目录:
cd /path/to/$(whoami)folder
cd /path/to/$(id -un)folder
Run Code Online (Sandbox Code Playgroud)
正如其他答案所说,$USER
通常设置为当前用户帐户的名称。
但至少在我的系统(Ubuntu 14.04)上,没有$USER
为 cron 作业设置环境变量。相反,您可以使用( POSIX ),它是cron 作业环境的一部分。$LOGNAME
根据environ(7)
手册页(键入man 7 environ
或man environ.7
阅读),$USER
由 BSD 派生程序使用,并由$LOGNAME
System-V 派生程序使用。如果它们都设置了,它们应该具有相同的值。两者的存在都是历史的偶然。(可能存在$USER
设置和$LOGNAME
未设置的情况,但我不知道有没有。)
该environ
手册页还记录了许多其他常见的环境变量。(它没有记录所有环境变量,因为这是不可能的。)