Использование sed в функции оболочки для автоматизации компиляции и запуска кода F # - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь создать скрипт bash для быстрой компиляции и запуска кода F # из моего терминала. Обычно, если бы у вас был файл с именем myCode.fsx, вам нужно было бы выполнить следующую команду:

fsharpc myCode.fsx && mono myCode.exe

Я попытался написать небольшую функцию в командной оболочке, которая принимает в качестве первого и единственного аргумента имя файла (включая .fsx) кода. Но я думаю, что у меня возникли проблемы с командой Sed. Это мой код, который сначала компилирует штраф в .fsx -файле, но потом я думаю, что Sed входит и изменяет текст в только что созданном myCode.exe -файле, а не просто изменяет расширение файла в команде терминала быть запущенным:

function fsx {
    fsharpc "$1" && mono | sed 's/fsx/exe/' "$1"
}

Как бы я решил эту проблему?

1 Ответ

0 голосов
/ 11 сентября 2018

Чтобы сделать это так, как вы начали, вам нужно подстановка команд и что-то вроде здесь-строки вместо трубы:

fsx() {
    fsharpc "$1" && mono "$(sed 's/fsx$/exe/' <<< "$1")"
}

IЯкорь fsx в конце строки, просто чтобы избежать проблем, если имя файла содержит fsx в другом месте.

Однако вы можете сделать это без внешних инструментов, просто с раскрытием параметра :

fsx() {
    fsharpc "$1" && mono "${1%fsx}exe"
}

${1%fsx} удаляет fsx с конца $1, конец exe просто добавляется.

Обратите внимание, что я использовал fsx() вместоfunction fsx;первое понимается всеми оболочками POSIX, второе - башизм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...