我很少发布问题,因为我倾向于独自尝试解决问题,但今天我真的陷入了困境......我度过了漫长的一周,我的大脑已经死亡了......
不管怎样,我正在尝试加载一个变量,它绘制一条与我的控制台长度相同的水平直线。
我尝试过用几种方法来划线:
'⎼' 不是下划线,字符位置比下划线略高,即:⎼_
printf'⎼%.s'$(seq 1 $COLUMNS)
python3 -c“打印('⎼'* $COLUMNS)”
这两个命令都会绘制线条,当我将其分配给一个变量时,例如:HORZLINE=$(printf '⎼%.s' $(seq 1 $COLUMNS)
然后调用$HORZLINE,它也会绘制线。
当我尝试添加该行时遇到问题(HORZLINE=$(printf'⎼%.s'$(seq 1 $COLUMNS)) 到 .bashrc 并尝试在启动时加载它。
var 加载了,但整行没有加载。只加载了一个字符。因此,当我尝试:
$: echo -e "$HORZLINE" ⎼
终端启动后,如果我再次获取 .bashrc 文件,变量将正确加载并绘制整条线。
有人知道我做错了什么或者发生了什么事吗?
**
更新-已解决
**
我只是想让你们知道,并为遇到同样问题的人更新此信息。
要解决这个问题,我所要做的就是启用 force_color_prompt(在 .bashrc 中取消注释)
我觉得自己太蠢了。我花了很长时间尝试所有这些不同的东西,而我应该只看一下 bashrc。
但你要知道,我甚至没有考虑过 force_color_prompt,因为终端正在做一些奇怪的事情,例如:1. 如果我启动 mate-terminal,提示会正确加载 2. 我重新启动 xterm,什么都没有 3. 弄乱 xterm 中的首选项,更改字体,再次启动终端,它就停止工作了。但如果我将字体改回系统默认字体,它就会再次工作。
所以我一直在研究 xterm 的设置,如果你有经验的话,就会知道这并不容易。
无论如何..就是这样。
感谢你的帮助。
答案1
问题是,即使checkwinsize
设置了,$COLUMNS
变量也不会被设置,直到SIGWINCH
收到信号。
我不确定这是否是正确的这样做的方法,但这似乎对我有用:
kill -s SIGWINCH $$
HORZLINE=$(printf '⎼%.s' $(seq 1 $COLUMNS))
echo "$HORZLINE"
[编辑:您不需要,-e
因为字符串中没有转义序列。]
答案2
这并不能直接解决您的问题,但在我的问题中,~/.bashrc
我在每个命令之间打印一条水平线:
这是通过设置$PS1
来实现的~/.bashrc
:
Divider=""
for ((i=0; i<$COLUMNS; i++)) ; do
Divider="$Divider""─"
done
if [ "$color_prompt" = yes ]; then
PS1='${Divider}\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${Divider}\n${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
注意:如果您更改窗口的宽度,gnome-terminal
则需要使用.bashrc
命令. ~/.bashrc
来在命令提示符中调整分隔线的大小。
答案3
就像我添加到我的问题中一样,问题是因为我没有在.bashrc中启用force_color_prompt。
一旦我取消注释该行,变量就会正确加载。
答案4
从 Bash 手册页的 COLUMNS
Automatically set if the checkwinsize option is enabled or in an interactive shell upon receipt of a SIGWINCH.
来看,关键是“交互式 shell”。在终端输入:
printf '⎼%.s' $(seq 1 $COLUMNS)
您将获得以下行。
将该命令放入文件(myline),设置可执行位并尝试:
./myline
单字符输出。
bash myline
单个字符输出
bash -i myline
您再次使用明确的“-i”获得该行以强制交互式 shell。