大多数情况下,命令的输出以换行符结尾。但有时不会,因此下一个 shell 提示与输出一起打印在同一行中。
例子:
root@hostname [~] # echo -n hello
helloroot@hostname [~] #
我一直觉得这很烦人。
现在,我可以在 PS1 变量的开头添加一个“\n”,但大多数情况下会打印我不需要的额外行。
是否有可能知道最后一个命令的输出是否以换行符结尾?
解决方案:(
感谢丹尼斯)
PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
Run Code Online (Sandbox Code Playgroud) 我有一个自定义的 bash 提示,它为我的用户名、主机名和当前工作目录着色。颜色显示正确,但是当我键入需要换行的命令行时,终端不会开始新行,而是覆盖命令的开头。这发生在 RHEL 4 和 Debian 上。
这个问题详细说明了 OS X 上的一个类似问题;似乎这是一个错误终止的控制序列的问题,但是我看不出是什么原因造成的,因为我到处都使用 $(tput) 代码,而不是手工编写我的代码。下面的片段 - 有没有人能够建议我做错了什么?
# Control codes
COL_RST=$(tput sgr0) # Remove all colour formatting
COL_BRIGHT=$(tput bold) # Emphasise
# Foreground
COL_G=$(tput setaf 2) # Green
COL_Y=$(tput setaf 3) # Yello
COL_B=$(tput setaf 4) # Blue
COL_USR=${COL_Y}${COL_BRIGHT}
COL_PWD=${COL_B}${COL_BRIGHT}
COL_HST=${COL_G}${COL_BRIGHT}
# Set prompt
PROMPT="${COL_USR}\u${COL_RST}@${COL_HST}\h${COL_RST}:${COL_PWD}\W${COL_RST}"
# Put it all together....
PS1="[$PROMPT]\$ "
export PS1
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含几个文件的目录,如下所示:
$ ls
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
我想在 bash 中做一些 tab 补全:
$ cat file<tab>
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
我记得看到有人在做 Tab 补全,shell 将下一部分加粗,所以在这种情况下,它会将文件名的1,2和加粗,3因此它看起来像这样:文件1 文件2文件3
这将告诉您接下来应该输入什么。
我认为这是 的一个功能zsh,但有什么办法可以得到它bash吗?
我有一个带有颜色的自定义提示(使用 tput),每次我在服务器中启动非交互式会话时,我都会收到一堆错误。
例如,如果我开始一个像这样的非交互式会话:
ssh root@hostname6 "echo 'hello' ; echo $TERM"
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
hello
xterm
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
stdin: is not a …Run Code Online (Sandbox Code Playgroud) 在 Windows 的命令行中给出一个很长的单个命令,我想简单地将该命令复制到剪贴板中。
我只是在寻找几乎所有编辑器都有的无处不在的 Shift-End 、 Ctrl-C 类型功能。
我不要想用马克(是的,即使是在快速编辑模式),这需要我来选择块,它的地方贴上,并手动删除回车。
当然,这并不难,但我有一个(合理的)场景,我经常这样做,但它变得很麻烦。
Cygwin 也不是一种选择,因为它做了一些不同的事情,这对我的场景不起作用。
编辑,选择的答案:
我结合了 romandas 和 crchad 的答案,我现在使用“控制台”程序进行多个选项卡和 romandas 对“剪辑”程序的建议完全改进了流程:
比我之前做的块编辑快得多。谢谢!
在标准的 Linux shell bash 中有几个默认值,我认为需要一些历史记录。这个问题是关于提示的。
许多 Linux 发行版中 bash 的默认提示是 [\u@\h \W]\$
对于那些无法解析的人,对于典型用户来说,它看起来像这样:
[staticsan@walcen files]$ _
Run Code Online (Sandbox Code Playgroud)
最大的问题是它只告诉您当前目录的名称。“文件”可以/var/www/files/像/home/staticsan/files(这是一个简单的例子)一样容易。完整路径更有意义,因此每次设置新框或创建新用户时,我都必须更改它。
那么为什么默认设置为它呢?
我有一个 bash 脚本,如果当我提示用户而不是仅仅要求输入时,它会更好,如果它提供了用户可以编辑的行(但全文编辑器会有点过分,它只有一行)
什么工具提供这个?
dialog的输入框几乎是正确的,但我宁愿它没有绘制整个屏幕。