AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 4889
Accepted
Dave K
Dave K
Asked: 2009-05-06 09:54:30 +0800 CST2009-05-06 09:54:30 +0800 CST 2009-05-06 09:54:30 +0800 CST

有哪些信息丰富且有用的 shell 提示?(Bash、csh、ksh 等)

  • 772
锁定。这个问题及其答案被锁定,因为这个问题离题但具有历史意义。它目前不接受新的答案或交互。

我最喜欢的 Mac OS X终端提示之一是使用.bashrc中的以下代码将最后运行的进程添加到终端标题中。

trap 'printf "\033]0;  `history 1 | cut -b8-`  \007"' DEBUG

现在,我希望将我的 Bash 提示从默认设置自定义为更实用的内容。有哪些有用的 shell 提示示例?

linux mac-osx bash command-line-interface
  • 14 14 个回答
  • 10631 Views

14 个回答

  • Voted
  1. Eddie
    2009-05-06T10:02:38+08:002009-05-06T10:02:38+08:00

    我有一个~/bin/setprompt由 my 执行的脚本.bashrc,其中包含:

    RESET="\[\017\]"
    NORMAL="\[\033[0m\]"
    RED="\[\033[31;1m\]"
    YELLOW="\[\033[33;1m\]"
    WHITE="\[\033[37;1m\]"
    SMILEY="${WHITE}:)${NORMAL}"
    FROWNY="${RED}:(${NORMAL}"
    SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"
    
    # Throw it all together 
    PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "
    

    此脚本将提示设置为主机名,然后:)是最后一个命令是否成功以及:(最后一个命令是否失败。

    • 7
  2. Best Answer
    chaos
    2009-05-06T09:58:31+08:002009-05-06T09:58:31+08:00

    我使用一个简单的两线:

    [\w]\n\u@\h>
    

    或者

    [\w]\n\u@\h#
    

    如果是根。人们看着我,好像我为使用两行提示而疯狂,但我讨厌只看到当前路径的最后一部分,而且我使用的路径太长而无法将整个内容与输入区。

    • 6
  3. Glen Solsberry
    2009-05-06T10:56:23+08:002009-05-06T10:56:23+08:00

    然而,这是我见过的最棒的一个:

    PS1='\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[0;28m\]Managing \033[1;31m\]\j\[\033[0m\]\[\033[1;30m\]/\[\033[0m\]\[\033[1;31m\]$(ps ax | wc -l | tr -d '\'' '\'')\[\033[0m\]\[\033[1;30m\] \[\033[0m\]\[\033[0;28m\]jobs.\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[0;28m\]CPU Load: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/loadavg) && echo ${temp%% *}) \[\033[0m\]\[\033[0;28m\]Uptime: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/uptime) && upSec=${temp%%.*} ; let secs=$((${upSec}%60)) ; let mins=$((${upSec}/60%60)) ; let hours=$((${upSec}/3600%24)) ; let days=$((${upSec}/86400)) ; if [ ${days} -ne 0 ]; then echo -n ${days}d; fi ; echo -n ${hours}h${mins}m)\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]$(ls -l | grep "^-" | wc -l | tr -d " ") \[\033[0m\]\[\033[0;28m\]files using \[\033[0m\]\[\033[1;31m\]$(ls --si -s | head -1 | awk '\''{print $2}'\'')\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[1;31m\]\u\[\033[0m\]\[\033[0;31m\]@\[\033[0m\]\[\033[1;31m\]\h \[\033[0m\]\[\033[1;34m\]\w\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]\t\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:. \[\033[0m\]\[\033[1;37m\]$ \[\033[0m\]'
    

    试一试。它提供了很好的信息,但它实际上会导致你的盒子上的负载增加,只需在提示符下按回车!

    • 4
  4. spoulson
    2009-05-06T10:30:24+08:002009-05-06T10:30:24+08:00

    我是默认 Cygwin bash 提示符的粉丝:

    PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
    

    或没有颜色:

    PS1='\n\u@\h \n\$ '
    

    好像:

    username@hostname
    $ ls -l
    
    • 3
  5. Ivan
    2009-05-06T10:18:59+08:002009-05-06T10:18:59+08:00

    这是我的(向右滚动查看更有趣的部分):

    '-------------------------------------------------------------------------------\n${debian_chroot:+($debian_chroot)}[\w]\n\u@\h\[\033[1;33m\]\[\033[0m\]($(__git_ps1 "%s")$(parse_git_dirty))$ 
    

    结果如下:

    -------------------------------------------------------------------------------
    [~]
    user@host()$ 
    

    当我在Git 存储库中时:

    -------------------------------------------------------------------------------
    [~/path_to_repo]
    user@host(master)$ 
    

    我选择使用多个换行符和“水平标尺”来使扫描缓冲区更容易,因此长路径名不会将光标推到右侧太远。

    • 2
  6. Glen Solsberry
    2009-05-06T10:43:24+08:002009-05-06T10:43:24+08:00

    我喜欢包括我的时间。给我一种time围绕我的命令的内置功能:

    PS1="[\t \u@\h:\w]$ "
    

    虽然在看到其中一些之后,它让我想让我的更聪明一点!

    • 2
  7. Zoredache
    2009-05-06T10:07:56+08:002009-05-06T10:07:56+08:00

    类似于混沌的答案,我有点喜欢

    \u@\h:\w\n\u@\h:\$
    

    这给了我

    root@host-10548:/var/www/site.org
    root@host-10548:$
    

    通过在第一行包含用户/主机,我可以在使用SCP或rsync将一些文件发送到该目录时轻松复制整个路径行。

    • 1
  8. jj33
    2009-05-06T10:18:20+08:002009-05-06T10:18:20+08:00

    在 ksh 中:

    在我的 .profile 中,我设置了以下 var(所以这个 var 在每个会话中只设置一次,无论我做了多少 'su's:

    PCH=\>
    

    在我的 .kshrc 我有:

    if let "${SPID:-0} != $$"; then
        PCHS="$PCHS$PCH"
    fi
    

    我使用以下别名而不是“su”成为 root(kroot 是具有 ksh shell 而不是 sh (solaris) 或 bash (linux) 的 root 用户:

    alias root='PCH=\# su -m kroot'
    alias me="PCH=\> su -m $USER"
    

    我还定义了这两个函数:

    function lprompt {
      PS1=$HOST' $? $PWD '"$PCHS "
    }
    function sprompt {
      PS1='$?":"${PWD##*/}'"$PCHS "
    }
    

    最后在 .kshrc 我有:

    lprompt
    

    默认情况下,所有这一切都让我自动设置提示结束,以指示我是否是 root(如果我的父级是 root)、当前工作目录、主机名和最后一个进程的退出状态。提示删除主机名,将路径缩小到仅基本名称,并删除空格:

    g3 0 /home/jj33 > expr 1 / 0
    expr: division by zero
    g3 2 /home/jj33 > expr 1 / 1
    1
    g3 0 /home/jj33 > root
    Password: 
    g3 0 /home/jj33 ># me
    g3 0 /home/jj33 >#> ^D
    g3 0 /home/jj33 ># sprompt
    0:jj33># me
    g3 0 /home/jj33 >#> sprompt
    0:jj33>#>expr 1 / 0
    expr: division by zero
    2:jj33>#>
    

    root/me 别名来自 Solaris 上的 pre-sudo 管理,旧习惯已经很难改掉。我怀疑这些天有人会实施完全相同的事情。即时更改功能和存在状态对我来说仍然很有价值。

    • 1
  9. Drew Stephens
    2009-05-07T16:04:33+08:002009-05-07T16:04:33+08:00

    我有一个简单的提示,但使用颜色来提供一些额外的信息:

    drewble:~$ 
    

    每台机器上主机名的颜色(在这种情况下为drewble)是不同的——当我得到一台我正在使用的新机器时,我为那台机器选择任意颜色。这样,当我打开很多终端时,很容易判断它们是通过 SSH 连接到哪台机器上,并减少了我在错误机器上所犯的错误。此外,当我这样做时sudo -s,我将主机名全部大写并将冒号涂成红色,这再次通过明确您以 root 身份来减少错误。路径(~在本例中是我的主目录)为亮绿色,这有助于分隔输出行;如果某些东西产生了大量的输出,那么很容易向上滚动并查看输出的开始位置。

    # Color the hostname
    HOSTNAME=`hostname|sed -e 's/\..*$//'`
    if [ $HOSTNAME = 'Caligula' ] || [ $HOSTNAME = 'Caligula.local' ]; then
        export HOST_COLOR="\[\033[1;35m\]"
    fi
    if [ $HOSTNAME = 'drewble' ]; then
        export HOST_COLOR="\[\033[1;34m\]"
    fi
    if [ $HOSTNAME = 'davinci' ]; then
        export HOST_COLOR="\[\033[1;31m\]"
    fi
    
    # Color the colon red & capitalize hostname if root
    COLON_COLOR='0m'
    if [ ${UID} -eq 0 ]; then
        COLON_COLOR='1;31m'
    fi
    if [ ${UID} -eq 0 ]; then
        HOSTNAME="`echo $HOSTNAME|tr '[a-z]' '[A-Z]'`"
    fi
    
    # Set the actual prompt
    PS1=`echo -ne "$HOST_COLOR$HOSTNAME\[\033[00m\]\[\e[$COLON_COLOR\]:\[\033[01;32m\]\w\[\033[00m\]\\[\033[01;33m\]\$\[\033[00m\] "`
    
    • 1
  10. deinspanjer
    2009-05-28T08:01:43+08:002009-05-28T08:01:43+08:00

    它不是 shell 提示,但它是一种可能符合您所要求的精神的自定义。

    我设置了以下环境变量:

    if [ -z "$PROMPT_COMMAND" ]; then
        export PROMPT_COMMAND='history -a'
    else
        export PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
    fi
    

    这样,如果我通过屏幕或其他方式打开多个终端,当它们相互破坏时我不会丢失历史记录。

    • 1

相关问题

  • 现在从 mac os 在 NTFS 分区上写入是否安全?

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

  • 最佳混合环境(OS X + Windows)备份?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve