$或#符号的名称是什么,表明你是否是root用户?

时间:2017-01-30 07:43:30

标签: bash shell

我最近发现#符号表示你是shell上的root(至少在bash shell中),而$符号表示你不是

这个标志的名称是什么,它真的具有我赋予它的含义吗?

它只是bash的东西吗?

  

在Ubuntu上使用默认bash配置的示例:

john@mycomputer /tmp $ echo "I'm a simple user"
mycomputer /tmp # echo "I'm the root user"

2 个答案:

答案 0 :(得分:3)

这叫做提示。目前,它们可以通过多种不同方式进行配置。这个related question给出了一些背景知识。

答案 1 :(得分:3)

似乎没有表明您的特权的提示字符的正式定义。

thorough answer to “What is the origin of the UNIX $ (dollar) prompt?”提供了大量历史背景,但它也没有此指标的名称。

在没有正式用语的情况下,我将其称为“提示权限指示符”或“提示指示符号”,或者甚至只是“提示指示符。”

所有shell都有一个提示符,其默认字符串以指示符号结尾,(默认情况下)几乎总是指示您是否为root。大多数shell允许您更改提示,大多数shell都可以指定提示符号。

以下是各种shell文档和标准中的内容:

bash man page的一部分:

PROMPTING
      When executing interactively, bash displays the primary prompt PS1 when
      it is ready to read a command, and the secondary  prompt  PS2  when  it
      needs  more  input  to  complete a command.  Bash displays PS0 after it
      reads a command but before executing  it.   Bash  allows  these  prompt
      strings  to  be  customized  by inserting a number of backslash-escaped
      special characters that are decoded as follows:
…
             \$     if the effective UID is 0, a #, otherwise a $

来自zsh man pages

Shell state
    %#       A `#' if the shell is running with privileges,  a  `%'  if  not.
             Equivalent  to `%(!.#.%%)'.  The definition of `privileged', for
             these purposes, is that either the effective user  ID  is  zero,
             or,  if  POSIX.1e  capabilities are supported, that at least one
             capability is raised in  either  the  Effective  or  Inheritable
             capability vectors.

POSIX standard甚至没有指定特权提示符号应该是什么:

  

PS1

     

每次交互式shell准备好读取命令时,此变量的值应进行参数扩展并写入标准错误。默认值应为$ 。对于具有特定其他实现定义权限的用户,缺省值可能是另一个实现定义的值。

另请参阅dash man pagedash是一个流行的基本POSIX shell,often安装为/ bin / sh):

    PS1      The primary prompt string, which defaults to ``$ '', unless you
             are the superuser, in which case it defaults to ``# ''.

POSIX和dash在您设置$PS1的内容中没有任何动态。默认提示设置一次,并被PS1变量的任何赋值替换,无法区分具有单个字符的root用户和非特权用户。您必须编写自己的代码以确定您是否有特权并在PS1作业中使用其输出。