首先,我使用的是 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