我环顾四周,寻找这个问题的答案,但我似乎没有找到(这很奇怪)。
我的问题是,是否有任何简单的方法可以从 Mac 上的终端内重新启动 BASH 会话。我只想要与关闭终端应用程序并再次启动它相同的行为(所有变量重置、.bash_profile
来源等)。
我知道如何获取.bash_profile
,但这不是我想要的。我想要这样做的原因之一是因为我的 BASH 提示插件有防止颜色被多次加载的代码。因此,采购.bash_profile
不会重新加载颜色变量,我必须重新启动终端应用程序才能使更改生效。
我想知道 bash 中的单括号。我知道它们用于在子 shell 中执行命令以及它们用于创建数组,但它们是否用于其他任何用途?
引起我注意的一件事是,当您使用 in 变量赋值时,例如
var=(hello)
echo $var # hello
Run Code Online (Sandbox Code Playgroud)
bash 不会产生错误或任何东西,并且输出与 if 相同
var=hello
Run Code Online (Sandbox Code Playgroud)
这两个变量定义相同还是有区别?
我不太理解 bash 测试操作员的这种行为。我用这一行来确定是否安装了 vagrant。
if [ $(vagrant --version > /dev/null) ]; then echo "HELLO"; fi
Run Code Online (Sandbox Code Playgroud)
我现在知道这会返回 false (1) 并且您应该只输入
if vagrant --version > /dev/null; then echo "HELLO"; fi
Run Code Online (Sandbox Code Playgroud)
以获得预期的结果。但我仍然不明白为什么 [ $(vagrant --version > /dev/null) ] 返回 false (1)。它不应该返回 true (0) 因为
$(vagrant --version > /dev/null)
Run Code Online (Sandbox Code Playgroud)
返回 true,这是一个表达式(不是吗?)。
来自测试手册页:
测试实用程序计算表达式,如果计算结果为 true,则返回零 (true) 退出状态;否则返回 1(假)。如果没有表达式,test 也返回 1 (false)。
我在这个问题上搜索了很多,发现了一些相关的问题,比如这个:终端提示没有正确包装。
我的问题是 bash 没有正确计算提示的长度,当我执行诸如ctrl-r或?滚动历史记录之类的事情时,这会把它搞砸。这基本上就是它的外观(没有颜色)。
? name@machine ~
01:09 $
Run Code Online (Sandbox Code Playgroud)
例如,当我使用向上箭头滚动浏览以前的命令时,某些字符会卡在提示中:
? name@machine ~
01:09 $m
Run Code Online (Sandbox Code Playgroud)
有时我也会遇到其他奇怪的行为,比如一些提示被覆盖(当我重新加载它时它会消失)。我的提示是这样的:
GIT_PROMPT_START_USER="\n_LAST_COMMAND_INDICATOR_ \[$Magenta\]\u\[$Orange\]@\[$White\]\h \[$Yellow\]\[$PathShort\]\[$ResetColor\]"
GIT_PROMPT_END_USER="\n\[$Blue\]$Time12a\[$ResetColor\] $ "
Run Code Online (Sandbox Code Playgroud)
我使用的东西叫做git-bash-prompt
:> https://github.com/magicmonty/bash-git-prompt >。
我认为搞砸的是时间变量,它在另一个文件中定义:
Time12a="\$(date +%H:%M)"
Run Code Online (Sandbox Code Playgroud)
我已经尝试了\[$Time12a\]
和$Time12a
in GIT_PROMPT_END_USER
,但它们似乎都不起作用。我的猜测是 bash 计算错误,因为$Time12a
表示 5 个字符 (hh:mm)。
bash 是如何计算这个长度的?是否可以明确设置 bash 的长度?答案非常感谢!