从 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 shell 运行脚本,则无需添加第三个上下文,您只需运行即可bash myscript.sh

来自 bash 手册页:

~/.bash_profile
    The personal initialization file, executed for login shells
~/.bashrc
    The individual per-interactive-shell startup file

如果您既不调用登录 shellbash -l也不调用交互式 shell bash,而是使用脚本作为参数,则不会加载任何文件。

例如,如果文件 test.sh 包含

function bashtest {
    echo "test"
}
bashtest

如果我使用 bash 执行它,它会使用 bash 作为解释器正确运行。

Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
$user@host ~> bash test.sh
$test
$user@host ~> 

如果您想直接输入 bash 命令,那么您可以像这样将命令传送给 bash:

$user@host ~> echo "function bashtest { echo test; }; bashtest" | bash
$test
$user@host ~> 

相关内容