我大部分时间都在 Unix 环境中工作并使用终端模拟器。我尝试在命令行上使用颜色,因为颜色使输出更加有用和直观。
有哪些选项可以为我的终端环境添加颜色?你用什么技巧?你遇到过哪些陷阱?
不幸的是,对颜色的支持因终端类型、操作系统、TERM 设置、实用程序、错误实现等而异。
经过大量实验,以下是我的设置中的一些提示:
TERM=xterm-color,大多数主机(但不是全部)都支持。screen,这增加了另一层乐趣。dircolors默认设置类似和,我不想在一百个不同的主机上修改它。所以我尝试坚持使用默认值。相反,我调整了终端的颜色配置。对某些Unix 命令(ls, grep, less, vim)和Bash 提示符使用颜色。这些命令似乎使用标准的“ ANSI 转义序列”。例如:
alias less='less --RAW-CONTROL-CHARS'
export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'
Run Code Online (Sandbox Code Playgroud)我会发布我的.bashrc并回答我自己的问题 Jeopardy Style。
我有一个问题,如果我在 bash 中输入很长的命令,终端将无法正确显示我输入的内容。我希望如果我有如下命令:
username@someserver ~/somepath $ ssh -i /path/to/private/key
myusername@something.someserver.comRun Code Online (Sandbox Code Playgroud)
该命令应呈现在两行上。相反,它通常会环绕并开始写在我提示的顶部,有点像这样:
myreallylongusername@something.somelongserver.comh -i /path/to/private/keyRun Code Online (Sandbox Code Playgroud)
如果我决定返回并更改某些参数,则不知道光标会出现在哪里,有时在提示的中间,但通常在我正在输入的行上方。
当我Up执行上一个命令时会发生额外的乐趣。我已经在 gnome-terminal 和 terminator 以及 i3 和 Cinnamon 上尝试过这个。有人建议这是我的提示,所以这里是:
\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\]Run Code Online (Sandbox Code Playgroud)
Ctrll, reset, 并且clear都按照他们说的做,但是当我重新输入命令或Up发生相同的事情时。
我检查并checkwinsize在 bash 中启用。这发生在 80x24 和其他窗口大小上。
这只是我学会忍受的东西吗?有什么我应该知道的魔法吗?我已经决定只使用一个非常短的提示,但这并不能解决问题。
我在 PS1 提示中使用了几种颜色,例如
\033]01;31\] # pink
\033]00m\] # white
\033]01;36\] # bold green
\033]02;36\] # green
\033]01;34\] # blue
\033]01;33\] # bold yellow
Run Code Online (Sandbox Code Playgroud)
在哪里可以找到我可以使用的颜色代码列表?
我查看了Colorize Bash Console Color,但它没有回答我关于实际代码列表的问题。
如果还有一个更易读的表格,那就太好了。
我有时会在各种应用程序中注意到这一点。我经常认为这是因为输出被提前取消(例如 ctrl+c)或类似的东西,而 zsh 正在填充一个新行字符。但是现在好奇心占据了我的心,因为它在 bash 中似乎没有做到这一点。
zsh

猛击

该Sequence程序是我在阅读 Java 认证时从书中提取的内容,只是想看看它是否可以编译和运行。我确实注意到它没有使用包/类中的println()方法System.out。相反,它使用普通的 old print()。
缺少换行符是我得到这个符号的原因吗?
我刚刚看到了某人终端的屏幕截图:

是否有可以在 Bash 提示中使用的所有字符的列表,或者有人可以为我提供星星和右箭头的字符吗?
通常,当我开始查看命令历史时,显示的命令中的某些字符不会被删除,例如:
发生了什么:
prompt$ some_command
prompt$ some_commanother_command
Run Code Online (Sandbox Code Playgroud)
应该发生的事情:
prompt$ some_command
prompt$ another_command
Run Code Online (Sandbox Code Playgroud)
我无法擦除这些字符,bash 在执行命令时会忽略它们。当显示新提示时(Enter例如按下后),它们也会消失。
我问过我工作场所的其他在 Linux 上工作的人,他们说他们有时也有这个问题,但他们不知道如何解决这个问题。
我有 Ubuntu 11.10,我正在使用 guake。这是我的PS1:
\e[0;31m\u \A ${PWD##*/}\e[0;32m$(parse_git_branch)\e[0;31m$\e[m
Run Code Online (Sandbox Code Playgroud)
这里parse_git_branch是
parse_git_branch () {
git name-rev HEAD 2> /dev/null | sed 's#HEAD\ \(.*\)# (\1)#'
}
Run Code Online (Sandbox Code Playgroud)
据我所知,即使 PS1 不那么“花哨”,我的同事也有这个问题。
我喜欢将我的文件保存bash_profile在git 存储库中,然后将其克隆到我可以通过 shell 访问的任何机器上。因为我tmux大部分时间都user@host在状态行中有一个字符串,而不是它在 shell 提示中的传统位置。
但是,并非我使用的所有站点都已tmux安装,或者我可能并不总是使用它。我想检测我何时不在tmux会话中并相应地调整我的提示。到目前为止,我半生不熟的解决方案.bash_profile看起来像这样:
_display_host_unless_in_tmux_session() {
# ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'
Run Code Online (Sandbox Code Playgroud)
(每次检查可能不是最好的方法,所以我愿意接受更好的方法的建议。Bash 脚本不是我的强项。)
我使用bindkey -v(对于 bash-ersset -o vi我认为它也适用于 zsh)或 vi(m) 模式。但是我没有任何视觉提示来告诉我是处于插入模式还是命令模式,这让我很烦恼。有谁知道如何让我的提示显示模式?
我可以像这样打印我当前的工作目录
myPrompt$ pwd
/Users/me/myDir
Run Code Online (Sandbox Code Playgroud)
我希望我的外壳看起来像这样
/Users/me/myDir$ pwd
/Users/me/myDir
Run Code Online (Sandbox Code Playgroud)
那可能吗?我该怎么做?
当我登录到 shell 时,我看到了其值存储在 PS1 中的提示。
我在使用 here-document 语法时也遇到了另一个提示(但不知道是哪个):
bc << HERE
>
Run Code Online (Sandbox Code Playgroud)
但这就是所有类型的提示。到目前为止我遇到过。什么样的情况会引起不同类型的提示?