鱼 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
我目前正在尝试运行
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