Ath*_*ark 10 bash executable fish
我目前正试图运行
原子编辑器
中bash壳,从fish壳.重要的是,我跑atom的bash,因为IDE-哈斯克尔如何处理ghc-mod路径的分辨率,和其他一些标准化的问题.
我是这样做的:
#~/.config/fish/config.fish
function start-atom
bash $HOME/lib/atom/bin/Atom/atom $argv
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行start-atom时fish,我收到以下错误:
/home/athan/lib/atom/bin/Atom/atom: /home/athan/lib/atom/bin/Atom/atom: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)
即使我知道这个文件是正确的和可执行的.有任何想法吗?谢谢!
Mr.*_*ama 11
当你运行bash file_name它意味着你试图file_name 作为bash脚本运行.
试试这个:
bash -c '$HOME/lib/atom/bin/Atom/atom "$@"' dummy $argv
Run Code Online (Sandbox Code Playgroud)
的-c意思是"运行此命令,而不是"运行此脚本使用bash"在bash".
正如Charles在评论中指出的那样,我们必须进行一些调整以将参数传递给命令.我们传递它们bash将它们用作提供的命令内部的位置参数,因此$@.
应该: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
Run Code Online (Sandbox Code Playgroud)
如果您需要 bash 会话来加载配置,请将其设为登录 shell。
所以,底线是:~/.config/fish/functions/start-atom.fish
function start-atom
bash -l -c '$HOME/lib/atom/bin/Atom/atom "$@"' _ $argv
end
Run Code Online (Sandbox Code Playgroud)