鱼壳和执行程序从bash通过`function`

时间:2015-01-08 18:42:16

标签: bash executable fish

我正在尝试运行 atom editor 来自bash shell 的fish shell ,中的。由于ide-haskell处理atom路径解析以及其他一些标准化问题,我在bash中运行ghc-mod非常重要。

以下是我的观点:

#~/.config/fish/config.fish

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

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

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

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

2 个答案:

答案 0 :(得分:11)

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

请改为尝试:

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

-c表示“使用bash运行此命令”而不是“使用bash运行此脚本”。

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

答案 1 :(得分:4)

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

下划线将成为bash的$0

演示:

$ 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