我最近发现#
符号表示你是shell上的root(至少在bash
shell中),而$
符号表示你不是
这个标志的名称是什么,它真的具有我赋予它的含义吗?
它只是bash
的东西吗?
在Ubuntu上使用默认bash配置的示例:
john@mycomputer /tmp $ echo "I'm a simple user" mycomputer /tmp # echo "I'm the root user"
答案 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 $
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 page(dash是一个流行的基本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
作业中使用其输出。