我有一个问题,如果我在 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变量设置.bashrc为以下内容:
PS1='\e[35m[\W]:\e[0m '
它实现了预期目标(更改显示cwd在内部[]和之前的提示的颜色:),但是当我搜索我的命令历史记录时,有时我循环遍历的部分命令会附加到提示上。例如:
[~]: echo "something"
something
[~]: date
Sun Nov 18 17:07:54 PST 2012
[~]: sudo apt-get install vim
...
Run Code Online (Sandbox Code Playgroud)
现在,说我想回到我的echo "something"命令,我按下并得到
[~]: sudo apt-get install vim
Run Code Online (Sandbox Code Playgroud)
我再次按下,这发生了
[~]: sudo apt-date
Run Code Online (Sandbox Code Playgroud)
再起来
[~]: sudo apt-echo "something"
Run Code Online (Sandbox Code Playgroud)
如果我按退格键删除命令行上的所有内容,它会一直删除
[~]: sudo apt-
Run Code Online (Sandbox Code Playgroud)
它对命令没有影响。例如,该行[~]: sudo apt-date仍将打印等的输出date。为什么会发生这种情况,如何在没有副作用的情况下实现所需的提示?
我将以下内容添加到我的~/.bashrc:
export PS1="\e[0;35m[\u@\h \W]\$ \e[m "
echo -e "\e[0;35mYOU ARE ON THE LIVE SERVER !!\e[0m"
Run Code Online (Sandbox Code Playgroud)
可悲的是,现在,每次我在 bash 中粘贴很长的内容时,它都会变得松软,tab屏幕上到处都是幽灵字符,并且线条相互吞噬,有人知道为什么吗?
用户提示:
user - / :
Run Code Online (Sandbox Code Playgroud)
向上/向下键定位历史命令。
user - / : historical command
Run Code Online (Sandbox Code Playgroud)
清除“历史命令”:
user - / :hist
Run Code Online (Sandbox Code Playgroud)
无论我按 BackSpace 多少次……都无法删除“hist”部分。
从技术上讲,它甚至不存在。但在屏幕上它不会清除,直到我点击“输入”
user - / :hist
user - / :
Run Code Online (Sandbox Code Playgroud)
是什么原因造成的?
问题可能是由于我在这里使用的颜色。但如何纠正呢?
PS1="\[\033[38;5;190m\]\u - \W : \e[m"
Run Code Online (Sandbox Code Playgroud) 由于某种原因,黄色(ANSI Esc.代码 33)在我的终端(yakuake、konsole)中对于普通字体显示为橙色/棕色。\n例如,该命令echo -e "\\\\033[33mhello world\\\\033[0m"返回橙色/棕色文本hello world。然而,粗体黄色却如预期般出现。在下面的小屏幕截图中,主机名位于黄色背景之上,这是转义码\\e[43m。

另一个例子是命令的输出terminal-colors -o。它给出的输出如下面的较大屏幕截图所示。

我使用 Funtoo-Linux 和 KDE。虽然我设置了一些透明度(23%),但我不认为这是对眼睛问题的误导。我该如何解决这个问题?
\n\n在 Funtoo 中,默认的bashrc下/etc/bash/包含:
38:# Set colorful PS1 only on colorful terminals.\n63: PS1=\'\\[\\033[01;31m\\]\\h\\[\\033[01;34m\\] \\W \\$\\[\\033[00m\\]\'\n65: PS1=\'\\[\\033[01;32m\\]\\u@\\h\\[\\033[01;34m\\] \\w \\$\\[\\033[00m\\] \'\nRun Code Online (Sandbox Code Playgroud)echo $TERM回报xterm-256color
echo $PS1被设定为
\\[\\e[0;30m\\e[45m\\] \\u \\[\\e[0;35m\\e[43m\\]\xee\x82\xb0 \\[\\e[0;30m\\e[43m\\]@\\H \\[\\e[0;33m\\]\xee\x82\xb0\\[\\e[0;32m\\] \\w\\a\\[\\e[0;32m\\] \xe2\x86\x92 \\[\\e[0m\\]\nRun Code Online (Sandbox Code Playgroud)如果有用,dircolors则返回:
我的配置的想法PS1是显示一些扩展信息,例如 Mercurial 或 Git 存储库状态、命令执行时间等。提示符被分成两行,因为它产生太多字符而无法放入一行。这是我PS1的.bashrc(不确定这里是否需要整个源代码):
function prompt_status {
local color_app="\e[1;38;5;214m"
local color_branch="\e[1;38;5;32m"
local color_revision="\e[0;38;5;64m"
if git rev-parse --is-inside-work-tree &> /dev/null; then
local branch="$(git rev-parse --abbrev-ref HEAD | tr -d '\n')"
local revision="$(git rev-parse HEAD | tr -d '\n')"
echo -ne $color_app"git "$color_branch"$branch "$color_revision"($revision)"
elif hg status &> /dev/null; then
local branch="$(hg branch | tr -d '\n')"
local revision_number="$(hg identify -n | tr -d '\n')"
local revision="$(hg parent --template '{node}' | tr -d '\n')"
echo …Run Code Online (Sandbox Code Playgroud) 我知道有很多相关的问题,但是我找不到任何其他方法来获得有关此问题的帮助:
在我的 CentOS 虚拟机上,我为我的 bash 提示制作了一个自定义脚本 /etc/profile.d/custom.sh
PS1="\n\e[0;97m\][\D{%d%m%y-%H%M}][\u@\h \W] \n\e[m\]\$ "
export PS1
Run Code Online (Sandbox Code Playgroud)
我的 bash 现在看起来像这样:

但是,如果我键入一个长命令并且我想使用 CTRL-A 将光标移到第一个位置,则会发生以下情况:
输入了很长的东西。我想在行的开头更改某些内容,因此我将按 CTRL-A 将光标置于第一个位置:

按 CTRL-A 后:

现在,如果我尝试使用 DEL 或 BACKSPACE 删除整行,这是最终结果吗?

无论我如何尝试删除这 4 个字符,它们始终会保留,直到我按下 ENTER 键。总是显示最后 4 个字符,但好像它们不存在.. 我可以随意输入命令,它们将被忽略:

在最后一张图片中,我成功执行了cd /var命令,现在 bash 就像预期的那样。
有什么想法吗?
我应该先说这个终端会话是通过 ssh 从 Windows PuTTY 到 Linux OpenSSH。我不确定这是否重要,但我想我还是应该说出来。
目前,当我在终端中写的内容超过一行时,文本从同一行而不是新行开始,并导致我的提示从这里开始:
trevor@SEARS-SERVER:~$
Run Code Online (Sandbox Code Playgroud)
对此(当然是示例文本):
ne lineSEARS-SERVER:~$ this is the text line that is too long to fit on o
Run Code Online (Sandbox Code Playgroud)
目前我的 PS1 是在我的 .bashrc 中设置的:
export PS1="\n[$(date +%r)] \e]0;\e[0;32m\u\e[m@\e[38;5;52m\h\e[m:\e[38;5;240m\w\e[m\e[97m$\e[m"
Run Code Online (Sandbox Code Playgroud)
此外,当窗口低于一定宽度时,会发生这种情况:
m$ :32:40 PM] trevor@SEARS-SERVER:~
Run Code Online (Sandbox Code Playgroud)
我知道这与我的 PS1 配置或 PuTTY 有关,但我不知道是哪个,或者为什么/如何。有什么帮助吗?
问题:
打开命令行提示符:
多次输入字母 a:
输入的文本不是换行,而是换行到同一行:
现在,开始按 b。第二次需要换行时,它将换行到新行:
是什么导致了这种行为?
像这样使用 PS1 会导致以下行为:
ps1Color="\033[1;35m"
export PS1='$(echo -en $ps1Color) Baz $'
Run Code Online (Sandbox Code Playgroud)
请注意,我想直接使用 echo 而不是颜色的原因是因为我想根据上一个命令的退出状态有条件地添加颜色。
直接使用颜色不会导致此行为发生。
我的问题是:
更新
明确地说,我真的想使用 echo 来做到这一点,因为我想有条件地改变颜色。
这是我目前拥有的:
function setPs1Colors_start () {
local previousExit=$?
local ps1Color="\033[1;35m"
local ps1FailBackground="\e[41m"
echo -en $ps1Color
if [[ previousExit -ne 0 ]]
then
echo -en $ps1FailBackground
fi
}
function setPs1Colors_end () {
local ps1DefaultColor="\033[0m"
echo -en $ps1DefaultColor
}
export PS1='$(setPs1Colors_start)[$(date +%b\-%d\ …Run Code Online (Sandbox Code Playgroud)