鱼 shell 并通过 `function` 从 bash 执行程序

The fish shell and executing programs from bash through `function`

我目前正在尝试运行 atom editor bash 外壳中来自 fish 外壳。我在 bash 中运行 atom 很重要,因为 ide-haskell 如何处理 ghc-mod 路径解析,以及其他一些标准化问题。

我是这样处理的:

#~/.config/fish/config.fish

function start-atom
  bash $HOME/lib/atom/bin/Atom/atom $argv
end

但是,当我尝试从 fish 运行 start-atom 时,出现以下错误:

/home/athan/lib/atom/bin/Atom/atom: /home/athan/lib/atom/bin/Atom/atom: cannot execute binary file

即使我知道这个文件是正确的和可执行的。有任何想法吗?谢谢!

当您 运行 bash file_name 时,这意味着您正在尝试 运行 file_name 作为 bash 脚本.

试试这个:

bash -c '$HOME/lib/atom/bin/Atom/atom "$@"' dummy $argv

-c 表示 "run this command with bash" 而不是 "run this script with bash"。

正如 Charles 在评论中指出的那样,我们必须做一些调整才能将参数传递给命令。我们将它们传递给 bash,它将在提供的命令中将它们用作位置参数,因此 $@.

应该是:bash -c '$HOME/lib/atom/bin/Atom/atom "$@"' _ $argv

下划线会变成bash的[=13=]

演示:

$ function test_bash_args
      bash -c 'printf "%s\n" "$@"' _ $argv
  end
$ test_bash_args one two three
one
two
three

如果您需要 bash 会话来加载您的配置,请将其设置为登录 shell。

所以,底线:~/.config/fish/functions/start-atom.fish

function start-atom
    bash -l -c '$HOME/lib/atom/bin/Atom/atom "$@"' _ $argv
end