shell 程序的提示符是怎么实现的?

2015-01-28 12:38:38 +08:00
 noanti
root@ubuntu:
这不是写到标准输出的,是怎么显示出来的呢?
2545 次点击
所在节点    问与答
10 条回复
chunyang
2015-01-28 12:45:17 +08:00
通过设置环境变量 PS1, PS2, PS3, PS4,`man bash` 中也有解释:

> PS1 The value of this parameter is expanded (see PROMPTING below) and used as the primary prompt string. The default value is ``\s-\v\$ ''.
superbear
2015-01-28 12:46:54 +08:00
可通过配置环境变量PS1来实现,
具体可看这篇文章[Linux下PS1、PS2、PS3、PS4使用详解](os.51cto.com/art/201205/334954.htm)
noanti
2015-01-28 12:57:20 +08:00
@chunyang
@superbear
我并不是想修改提示符……我的意思是提示符是怎么显示在终端上的?比如bash的user@host,并不是bash程序把这个字符串写到了标准输出上。
我要是想自己写一个shell程序,应该怎么实现提示符?
lululau
2015-01-28 13:06:59 +08:00
大概是下面这样?

print(expand-ps1(value-of-ps1))

while (cmd = stdin.read-line()) {
do-expansions-and-substitutions
fork and exec cmd
print(expand-ps1(value-of-ps1))
}
chunyang
2015-01-28 13:22:23 +08:00
> root@ubuntu:
> 这不是写到标准输出的,是怎么显示出来的呢?

写到 STDOUT 也”能“显示出来了,至于标准 I/O 是如何工作的,可能涉及到文件系统的知识,我不太了解。
sNullp
2015-01-28 13:40:33 +08:00
@noanti 明明就是写到stdout。。。
zealic
2015-01-28 13:53:36 +08:00
@sNullp Shell 程序一般都会申请一个 tty/pts,往这个设备里面写入。
具体可以看 《Unix 高级编程》关于 tty 那部分。
sNullp
2015-01-28 14:41:21 +08:00
@zealic 学习了,多谢!
noanti
2015-01-28 17:53:45 +08:00
@sNullp 不是的,你用管道把sh的标准输出写到文件,是没有提示符的。
shoumu
2015-01-28 17:56:19 +08:00
我记得我们实现shell的时候就是直接写到stdout的,看了楼上的,学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/166137

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX