从 FISH 运行时自定义 bash“上下文”

从 FISH 运行时自定义 bash“上下文”

首先,我使用的是 OSX10。我的默认 shell 是 BASH,我已将其设置为(通过 .profile 和 .bashrc),以便在打开终端模拟器时自动运行 FISH shell。这允许我在加载 FISH 之前在 BASH 中设置变量等。

然而,有时我想从 FISH shell 运行为 BASH 编写的脚本。这是必要的,因为 FISH 在语法上与 BASH 不兼容。当在我的 FISH 中输入“bash”时,由于我的 .profile/.bashrc,我打开的 BASH 会自动在其自身之上打开另一个 FISH。这使得一切变得可疑(双关语),因为然后我必须退出顶部的 FISH 才能进入第二个 FISH 顶部的 BASH。

我的问题是:我知道 BASH 可以作为登录 shell(执行 .profile)和非登录 shell(执行 .bashrc)加载。是否可以添加第三个“上下文”,我可以将其设置为在从 FISH 内部运行 BASH 时加载?这将解决双 FISH 问题,因为我无法加载 .bashrc 或 .profile。

我希望你能理解我的问题——提前感谢你的回答!

答案1

您可以在脚本中设置一个变量,该变量开始fish指出您“在fish”:

export IN_FISH=yes

然后,在此之前,您检查它是否已经设置:

if [ "${IN_FISH}" != "yes" ]; then
    export IN_FISH=yes
    fish  # replace with the command you use to start fish
fi

因此,在您的第一个bash,中IN_FISH没有设置,因此它被设置并fish启动。当你bash从FISH开始时,IN_FISH已经设置好了,所以bash不会fish再开始......

答案2

另外,我在想,您可以编辑脚本以通过插入以下内容来显式使用 BASH:

#!/pathtobash/

在脚本中作为第一行

例如#!/bin/bash

或者做一个明确的

/pathtobash/scripttorun

调用例如 /bin/bash/scripttorun

相关内容