2016-01-17 12 views
9

Do niedawna byłem wykonaniu tej piękno budowania + uruchomić projekt ze stosu:Czy istnieje "run stack" podobny do `cabal run`?

stack build && .stack-work/install/x86_64-linux/lts-4.1/7.10.3/bin/<project-name> 

powiedziano mi na IRC, że to może być uproszczone do

stack build && stack exec <project-name> 

Może to być uproszczona jeszcze bardziej, aby

stack run 

lub co najmniej

stack run <project-name> 

?

Jeśli dobrze pamiętam, to było możliwe z cabal run.

Edit:

@ komentarzu haoformayor jest coraz bliżej:

alias b='stack build --fast --ghc-options="-Wall" && stack exec' 

Mimo to nadal potrzebuje nazwę projektu, prawda?

Ja również rozpoczęła się zbliżyć z

function stack-run() { stack build && stack exec `basename "$PWD"` } 

chociaż ten działa tylko wtedy, gdy nazwa projektu mecze z nazwy folderu. Może możemy zapytać cabal/stack dla pierwszego wpisu executable w pliku .cabal? Albo Może moglibyśmy zrobić z sed ...

+0

nie wierzę, że jest odpowiednikiem polecenia. Używam aliasów powłoki, aby zrobić coś podobnego. Coś w stylu 'alias b = 'stack build --fast --ghc-options =" ​​- Wall "&& stack exec'' – hao

+0

@haoformayor To zbliża się do tego, czego szukam. Sekundę, nieco przedłużę moje pytanie. – Wizek

+1

jest dość łatwo pobrać nazwę pliku wykonywalnego, jeśli jest to potrzebne: 'grep '^ executable' * .cabal | cut -d '' -f 2 | head -n 1' – hao

Odpowiedz

4

miałem dość dobre doświadczenia przy użyciu:

https://hackage.haskell.org/package/stack-run


Old odpowiedź:

To, co skończyło się robi teraz.

#/usr/bin/env sh 

stack build && stack exec `basename "$PWD"` "[email protected]" 

Mam umieścić następujące do pliku o nazwie stack-run pod moim $PATH. ~/.local/bin/stack-run w moim przypadku.

który pozwala mi

$ stack-run 

w dowolnym katalogu, a nawet

$ stack run 

Ponieważ w prawie wszystkich moich projektów wykonywalny projektu nosi taką samą nazwę jak folderze to działa . Mam jednak nadzieję, że rozszerzę go również o wsparcie dla różnych nazwisk.


Edycja 26.09.2016: Znalazłem też to, ale nie biorąc pod uwagę to spróbować jeszcze: https://hackage.haskell.org/package/stack-run

11

jak to wspomniano tutaj http://docs.haskellstack.org/en/stable/README.html#quick-start-guide, można użyć stack exec my-project-exe gdzie my-project-exe to nazwa pliku wykonywalnego w pliku .cabal.

+0

, możliwe jest również przekazanie pewnych argumentów wiersza poleceń:' stack exec - ' –

+7

Cóż, jestem trochę zdezorientowany tą odpowiedzią. @Govind Jaka jest twoja odpowiedź inna niż to, o czym wspomniałem w pytaniu dotyczącym 'stack exec'? Szukam polecenia, które 'stack build' +' stack exec' projektu, podobnie jak to zrobić z "cabal run". – Wizek

6

Można użyć --exec powiedzieć stos co program powinien być uruchamiany po udanej budowy:

stack build --exec <executable-name> 

Można również podać argumenty za wykonywalnego, np

stack unpack pandoc && cd pandoc* 
stack build --exec "pandoc --version" 

To chyba najbliżej dostaniesz porównaniu cabal run, ponieważ zarówno stack exec a flaga --exec trzeba nazwę pliku wykonywalnego. Najczystszym wariantem będzie jednak dodatkowe polecenie stack-run, które ma wartość stack build --exec <first-executable in .cabal>. Może to być warte a feature request w śledzącym wydaniu programu GitHub.

+1

Nawiasem mówiąc, jeśli masz zainstalowany zarówno stos kabinowy jak i stosu, możesz także uruchomić "kablową kompilację - wylogowanie" ". Ale to jest trochę wymyślne. – Zeta