BASH 变量在启动时无法正确加载

BASH 变量在启动时无法正确加载

我很少发布问题,因为我倾向于独自尝试解决问题,但今天我真的陷入了困境......我度过了漫长的一周,我的大脑已经死亡了......

不管怎样,我正在尝试加载一个变量,它绘制一条与我的控制台长度相同的水平直线。

我尝试过用几种方法来划线:

'⎼' 不是下划线,字符位置比下划线略高,即:⎼_

  1. printf'⎼%.s'$(seq 1 $COLUMNS)

  2. 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 中取消注释)

这是我的提示未正确加载的屏幕截图: force_color_prompt 注释掉

它看起来应该是这样的: force_color_prompt 已启用

我觉得自己太蠢了。我花了很长时间尝试所有这些不同的东西,而我应该只看一下 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我在每个命令之间打印一条水平线:

终端分割线.png

这是通过设置$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。

相关内容