在PS1里面使用 $?, 为什么没有效果?
Tofloor
poster avatar
felloak
deepin
2012-01-11 23:06
Author
输入 false , 每次也都是回显0,
版本11.06.1, 在 $HOME/.bashrc 里面修改PS1.
Reply Favorite View the author
All Replies
s.******[email protected]
deepin
2012-01-12 02:11
#1
输入 false , 每次也都是回显0,
版本11.06.1, 在 $HOME/.bashrc 里面修改PS1.
呃。。。能仔細描述你在做什麼,想做什麼麼?
Reply View the author
felloak
deepin
2012-01-12 03:07
#2
如果PS1变量赋值为 "$?,$ ", 提示符就回显示上一次运行命令的返回值,比如
  1. rm no_file
Copy the Code
no_file不存在,上一个rm命令回返回1,echo $? 会显示1,
于是,期望的提示符应该是这个样子:
  1. 1,$
Copy the Code

如果成功运行一个命令,一般返回0,那么期望的提示符应该是这个样子:
  1. 0,$
Copy the Code

再比如运行一个不存在的命令
  1. no_cmd
Copy the Code
找不到这个命令,shell会返回127,那么期望的提示符应该是这个样子:
  1. 127,$
Copy the Code

在deepin的shell下面,以上都只显示
  1. 0,$
Copy the Code
Reply View the author
stephen
deepin
2012-01-12 06:05
#3
输入 false , 每次也都是回显0,
版本11.06.1, 在 $HOME/.bashrc 里面修改PS1.

下面是我的PS1:
  1.     PS1="\n${COLOR}(\u)-(\h)${IS_REMOTE}${IS_SCREEN}-(jobs:\j)-(\`echo '$''?:'\$?\`)-(\w)${NO_COLOUR}\n${COLOR}(! \!)-> ${NO_COLOUR}"
Copy the Code

其中跟$?有关的部分是:
  1. \`echo '$''?:'\$?\`
Copy the Code

这个的输出的样子是:
  1. ($?:0)
Copy the Code

再简化的看就是:
  1. \`echo \$?\`
Copy the Code

要注意,如果你的PS1是这样写的:
  1. PS1="$? blabla"
Copy the Code

那么,这条语句中的$?在赋值给PS1之前就已经被替换成0(或者1,看这个的前面一条命令)了,而不是每次执行完命令之后重新给PS1赋值。

还要注意的是,我的例子中,所有的反引号都加了转义的斜杠,原因相同,如果不加斜杠转义,那么在PS1的赋值语句执行时,就已经被替换了。
Reply View the author
felloak
deepin
2012-01-12 17:36
#4
谢了,
要注意加斜杠转义.
Reply View the author