你也可以直接在提示符中使用常规 Linux 命令的输出。显然,你不想插入过多的内容,否则会创建一个很大的提示符。你还需要使用快速的命令,因为它会在每次提示符出现在屏幕上时执行,并且在工作时提示符出现延迟会非常烦人。(与之前非常相似的示例不同,这在 Bash 1.14.7 中确实有效。)
[21:58:33][giles@nikola:~]$ PS1="[\$(date +%H%M)][\u@\h:\w]\$ " [2159][giles@nikola:~]$ ls bin mail [2200][giles@nikola:~]$ |
重要的是要注意命令替换中美元符号之前的反斜杠。如果没有它,外部命令只会被执行一次:当 PS1 字符串被读取到环境中时。对于这个提示符,那意味着无论提示符使用多久,它都会显示相同的时间。反斜杠保护 $() 的内容免受立即的 shell 解释,因此每次生成提示符时都会调用 date。
Linux 自带了很多小的实用程序,例如 date、grep 或 wc,它们允许你操作数据。如果你发现自己试图在提示符中创建这些程序的复杂组合,那么创建你自己的别名、函数或 shell 脚本,并从提示符中调用它可能会更容易。在 bash shell 脚本中,通常需要转义序列来确保 shell 变量在正确的时间扩展(如上面 date 命令所见):这在提示符 PS1 行中被提升到另一个级别,通过创建函数来避免它是好主意。
下面给出了一个在提示符中使用的小型 shell 脚本的示例
#!/bin/bash # lsbytesum - sum the number of bytes in a directory listing TotalBytes=0 for Bytes in $(ls -l | grep "^-" | awk '{ print $5 }') do let TotalBytes=$TotalBytes+$Bytes done TotalMeg=$(echo -e "scale=3 \n$TotalBytes/1048576 \nquit" | bc) echo -n "$TotalMeg" |
我过去常常将其作为一个函数来保存,但现在它作为 shell 脚本存在于我的~/bin目录,它在我的路径中。在提示符中使用
[2158][giles@nikola:~]$ PS1="[\u@\h:\w (\$(lsbytesum) Mb)]\$ " [giles@nikola:~ (0 Mb)]$ cd /bin [giles@nikola:/bin (4.498 Mb)]$ |