免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2224 | 回复: 8
打印 上一主题 下一主题

/etc/bashrc配置命令行的一句话看不懂 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-29 23:00 |只看该作者 |倒序浏览
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "

&&后半部分不就可以了吗?
为什么[]中只要一个\,外面要两个\

论坛徽章:
0
2 [报告]
发表于 2006-10-30 02:30 |只看该作者
看十三问或查一下表达式使用方法

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2006-10-30 07:33 |只看该作者
用root 试一下,就知道\$和\\$有什么不同了,&&后面的[]是普通字符,没什么意义

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-10-30 15:54 |只看该作者
恩. 你先開一個 sub shell.
然後修改一下 PS1 看看:
PS1='\\u@\\h \\$ '
PS1= '\u@\h \\\$'

[ 本帖最后由 網中人 于 2006-10-30 22:20 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-10-31 17:28 |只看该作者
原帖由 網中人 于 2006-10-30 15:54 发表
恩. 你先開一個 sub shell.
然後修改一下 PS1 看看:
PS1='\\u@\\h \\$ '
PS1= '\u@\h \\\$'


试了
\\u@\\h与\u@h没有区别,显示用户名与主机名。不解
如果是\\\u@\\\h,则显示\u@\h。看成\\和\u?
\\\\u@\\\\h的显示与\\\u@\\\h相同
\\\\\u@\\\\\h显示\user@\host

\$,显示$
\\$,根据是不是root,显示#或$
\\\$, 显示与\\$相同
\\\\$,显示$
怎么不显示反斜扛?

有什么规律啊?

[ 本帖最后由 jronald 于 2006-10-31 17:33 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-10-31 17:45 |只看该作者
[rcui@corp-as rcui]$ ssh linux-9
Last login: Tue Oct 31 15:33:10 2006 from 192.168.2.204
[rcui@linux-9 ~]$ pwd
/home/rcui
[rcui@linux-9 ~]$ PS1='\\u@\\h \\$ '
\u@\h $ logout
Connection to linux-9 closed.
[rcui@corp-as rcui]$ ssh linux-9
Last login: Tue Oct 31 17:43:49 2006 from 192.168.2.204
[rcui@linux-9 ~]$ PS1='\\u@\\h \\$ '
\u@\h $ exit
logout
Connection to linux-9 closed.


[rcui@corp-as rcui]$ ssh linux-9
Last login: Tue Oct 31 17:44:12 2006 from 192.168.2.204
[rcui@linux-9 ~]$ PS1= '\u@\h \\\$'
-bash: \u@\h \\\$: command not found

我执行的结果是这样的,LZ,好象跟你的说法有出入。

论坛徽章:
0
7 [报告]
发表于 2006-10-31 18:15 |只看该作者
我装的是rh9
难道是shell解释器的问题?我想应该不会啊。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-11-02 01:05 |只看该作者
哦. 其實還要看 "  "(雙引) 跟 ' '(單引) 的差別呢.

基本上, 我個人的理解是(不見得正確):

在 soft quote 中, \ 後面的 char 是否為 meta 將是關鍵.
如果是 meta, shell 會先處理. 如果不是 meta, 那就不處理, 因此 "\u" 還是 \u, "\\u" 也是 \u.

那麼, 在 shell 裡, 假如你用 "\\u", 因為是在 soft quote 裡,
因此 shell 先將 \\ 變成 \ , 然後在 PS1 裡就是 \u , 這個 \u 是有意義的.
然而, 若換成 '\\u', 因為在 hard quote 裡, 那 shell 是不做任何處理,
那麼, 在 PS1 中就是 \\u, 那 \\ 就將 \ 的功能被關了, 因此得到一條 \ 跟 u .

so... 讓我回頭來看:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
第一個命令是 test, 看看 $PS1 的結果是不是 \s-\v\$,
如果是(&&), 那就將 PS1 修改為 [\u@\h \W]\$ 這個式樣.

讓我們來做個實驗:
kenny@x40:~> su -                 #先換成管理員
密碼:
x40:~ # bash                           # 進入 subshell
x40:~ # PS1='\s-\v\$ '           # 用 hard quote
bash-3.1# PS1="\s-\v\$ "     # 用 soft quote, 但要知道 \ 後面的 $ 是 meta, 所以 \$ 已經被 shell 處理為 $
                                                # 因此下個 prompt 最後(紅色部份)是 $ 而不是 # , 因為在 PS1 裡, 最後是 $ 而不是 \$
bash-3.1$ PS1='[\u@\h \W]\$ '    # 然後再用 hard quote, 所以 \$ 不變, 在 PS1 還是 \$
[root@x40 ~]# PS1="[\u@\h \W]\\$ "   # 這次我們學乖了, 在 soft quote 中先用 \\ 再接 $, 經處理後於 PS1 裡就是 \$
[root@x40 ~]#

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2006-11-02 08:39 |只看该作者
原帖由 網中人 于 2006-11-2 01:05 发表
在 soft quote 中, \ 後面的 char 是否為 meta 將是關鍵.
如果是 meta, shell 會先處理. 如果不是 meta, 那就不處理, 因此 "\u" 還是 \u, "\\u" 也是 \u

讲的好,更准确点双引号中\只对下面5个字符转义
1.\
2.`
3. "
4.$
5.换行符

其它的都保留字符值并保留\
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP