为什么$是用户外壳程序的默认符号,而#是根外壳程序的默认符号?


10

在服务器上运行标准bash shell时,PS1提示符默认以非root用户结尾为$,以root结尾。

IE浏览器:

ubuntu@server:~$ sudo su
root@server:/home/ubuntu#

为什么是这样?


历史上或更直接地?
Jeff Schaller

Answers:


16

从历史上看,原始的/ bin / sh Bourne shell将$用作普通提示,并#用作root用户提示(而csh将使用%)。这使您很容易判断您是否以超级用户身份运行。

# 也是注释字符,因此任何盲目重新输入数据的人都不会运行任何实际命令。

更现代的炮弹(如KSH,bash)的继续这种区别$#虽然它不那么重要时,你可以设置更复杂的值,如用户名,主机名,目录:-)


您能否举一个例子,#当注释字符盲目地重新输入数据时,注释字符如何阻止某人运行实际命令?
John Gowers

6
如果您剪切并粘贴完整的行会发生什么# reboot-回答...没什么,因为这#是评论。
史蒂芬·哈里斯

9

传统。

POSIX标准说(我的重点):

PS1

此变量用于交互式提示。从历史上看,“超级用户”的提示符为“#”。由于不需要特权是整体的,因此很难定义哪些特权应引起备用提示。但是,应该通过显示备用提示来提醒功能强大的用户该功能。

在SuperUser论坛上也可以看到几乎相同的问题的答案


要添加,可以在“基本原理”>“ C。Shell和实用程序的基本原理”>“ 2。Shell命令语言;我只需要找到它的参考即可:)
forquare

1
@forquare谢谢。我现在添加了正确的链接。
Kusalananda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.