Оболочка рыбы и выполнение программ из bash через `function`
В настоящее время я пытаюсь запустить
редактор атома
в оболочке bash
, из оболочки fish
. Важно, чтобы я выполнял atom
в bash
из-за того, как ide-haskell обрабатывает разрешение 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
Хотя я знаю, что этот файл является правильным и исполняемым. Есть идеи? Спасибо!
Ответы
Ответ 1
При запуске bash file_name
это означает, что вы пытаетесь запустить file_name
как bash script.
Попробуйте это вместо:
bash -c '$HOME/lib/atom/bin/Atom/atom "[email protected]"' dummy $argv
-c
означает "выполнить эту команду с помощью bash" вместо "запустить этот script с помощью bash".
Как заметил Чарльз в комментариях, нам нужно немного подправить, чтобы передать параметры команде. Мы передаем их в bash
, который будет использовать их в качестве позиционных параметров внутри поставляемой команды, следовательно, [email protected]
.
Ответ 2
должен быть: bash -c '$HOME/lib/atom/bin/Atom/atom "[email protected]"' _ $argv
Подчеркивание станет bash $0
Демонстрация:
$ function test_bash_args
bash -c 'printf "%s\n" "[email protected]"' _ $argv
end
$ test_bash_args one two three
one
two
three
Если вам нужен этот bash сеанс для загрузки ваших конфигураций, сделайте его оболочкой входа.
Итак, нижняя строка: ~/.config/fish/functions/start-atom.fish
function start-atom
bash -l -c '$HOME/lib/atom/bin/Atom/atom "[email protected]"' _ $argv
end