作家
登录

Linux:终端提示符 (prompt) 不如期生效原因

作者: 来源: 2017-07-26 15:02:50 阅读 我要评论

Linux:终端提示符 (prompt) 不如期生效原因

媒介

先来简单介绍下, prompt是什么鬼? 顾名思义就是提示符的意思, 看起来和我们遥远, 但实际上只如果每个接触shell的童鞋, 都有看到, 那就是我们在输敕令时前面的那串提示符.

例如:

当然, 这个样式是可以修改的, 这就涉及到我们的PS1和PS2了, 有经验或者以前有设置过的童鞋估计都不会陌生, 木有接触过的童鞋可以参考一下链接进修下: linux PS1 提示符定义

问题

我们先来看个需求(简单):

想要在每次履行敕令时, 看到当前的时光

单引号: 让所有的符号, 都掉去意义, 变为通俗的字符.

所以我们可以在~/.bash_profile琅绫擎参加下面的内容:

  1. export PS1="$(date +"%Y-%m-%d %H:%M:%S")\$ " 

如代码所示, 应当可以或许在提示符上看到我们的时光, 如今实验下:

正如我们猜测的一样, 提示符那边已经变成了我们的时光了, 然则貌似出现了一个问题, 当我们在履行下一条敕令时, 时光却没有改变, 照样40秒, 哪怕我们多履行几回照样如许.

难道PS1只能加载一次? 然则这个原因很快就被否决, 因为当我们在切换用户时, 提示符的$会改变成#, 并且也有其他的例子(下面会举出来)证实, PS1是每次都邑履行的. 所以问题只能在于我们写法中.

推敲到是不是写逝世敕令的缘故, 于是就把date敕令放到函数中, 看可否成功:

修改~/.bash_profile文件如下:

  1. echo_time(){ 
  2.  
  3. date +"%Y-%m-%d %H:%M:%S" 
  4.  
  5.  
  6. export PS1="$(echo_time)\$ " 

  1. # 双引号: 
  2.  
  3. PS1="$(date +%F)" 掏出来的结不雅就是: PS1="2017-07-24" 
  4.  
  5. # 单引号: 
  6.  
  7. PS1='$(date +%F)' 掏出来的结不雅就是: PS1='$(date +%F)'  

结不雅是掉败的, 貌似如许的用法也是不可的! 查阅了很多文档, 直到看到一篇文┞仿说, 两边必须是单引号, 才恍然大年夜悟, 开端有点懂得为什愦我的效不雅会掉败.

可能这里会有童鞋不清跋扈linux的单引号和双引号的差别, 简单来说就是:

双引号: 让大年夜部分的符号(例如*), 掉去意义,变为通俗的字符.

举个简单的例子, echo "$a", 可以得出变量a的值, 然则echo '$a', 就真的只能输出$a. 具体的细节, 可以查阅<shell十三问>.

原因分析

所以我这边掉败的原因就是, 我这里须要用的是单引号, 而不是双引号, 因为如不雅用双引号, PS1在赋值时, 就已经获得敕令/函数的值了, 所以每次打印PS1, 都已经是具体的值了, 而不是一个敕令/函数. 就似乎:

所以比及在终端输出时, 就会有不合的表示: 单引号, 每次输出, 都是履行那个函数, 而双引号, 因为已经是固定字符了, 所以每次都是那个值!

因为膳绫擎的并不是此次的主题, 所以简单跳过. 其实我们的prompt除了可以或许展示这些信息之外, 还可以或许展示些较为'动态'的器械.

解决筹划

找到了原因, 修改起来就轻车熟路了, 我们只须要将刚才的语法, 大年夜双引号换成单引号即可.

修改~/.bash_profile

  1. echo_time(){ 
  2.     date +"%Y-%m-%d %H:%M:%S" 
  3.  
  4. export PS1='$(echo_time)\$ ' 


  推荐阅读

  2017,最受欢迎的15大Python库有哪些?

1. NumPy (提交数: 15980, 供献者数: 522)近年来,Python 在数据科学行业扮演着越来越重要的角色。是以,我根据比来的应用体验,在本文中列出了对数据科学家、工程师们最有效的那些库。因>>>详细阅读


本文标题:Linux:终端提示符 (prompt) 不如期生效原因

地址:http://www.17bianji.com/lsqh/36415.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)