2016-01-17 7 views
9

Fino a poco tempo fa, mi è stato l'esecuzione di questo bellezza per costruire + eseguire un progetto con una pila:Esiste un `stack run 'simile a` cabal run`?

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

mi è stato detto su IRC che questo può essere semplificata in

stack build && stack exec <project-name> 

Questo può essere ancora più semplificato, a

stack run 

o almeno

stack run <project-name> 

?

Se ricordo correttamente ciò era possibile con cabal run.

Edit:

@ commento di haoformayor si sta avvicinando:

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

Anche se questo ha ancora bisogno il nome del progetto, giusto?

Ho anche iniziato ad avvicinarmi con

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

Anche se questo funziona solo se il nome del progetto corrisponde con il nome della cartella. Forse possiamo interrogare cabal/stack per la prima voce executable nel file .cabal? O forse potremmo farlo con sed ...

+0

io non credo ci sia un comando equivalente. Uso gli alias di shell per fare qualcosa di simile. Qualcosa come 'alias b = 'stack build --fast --ghc-options =" ​​- Wall "&& stack exec'' – hao

+0

@haoformayor Questo si sta avvicinando a quello che sto cercando. Un secondo, estenderò un po 'la mia domanda. – Wizek

+1

è abbastanza facile afferrare il nome dell'eseguibile se necessario: 'grep '^ eseguibile' * .cabal | cut -d '' -f 2 | head -n 1' – hao

risposta

4

Ho avuto una buona esperienza piuttosto utilizzando:

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


Vecchia risposta:

Questo è quello che ho finito per fare, per ora.

#/usr/bin/env sh 

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

ho messo quanto segue in un file chiamato stack-run sotto il mio $PATH. ~/.local/bin/stack-run nel mio caso.

Il che mi permette di

$ stack-run 

in qualsiasi directory, e anche

$ stack run 

Dal momento che in quasi tutti i miei progetti l'eseguibile del progetto porta lo stesso nome della cartella, questo funziona . Ma spero di estenderlo anche con il supporto di nomi diversi.


Edit 2016/09/26: ho trovato anche questo, ma non hanno dato una prova ancora: https://hackage.haskell.org/package/stack-run

11

Come è menzionato qui http://docs.haskellstack.org/en/stable/README.html#quick-start-guide, è possibile utilizzare stack exec my-project-exe dove my-project-exe è il nome del file eseguibile nel file .cabal.

+0

è anche possibile passare alcuni argomenti della riga di comando:' stack exec - ' –

+7

Beh, sono un un po 'confuso da questa risposta. @ Govind In che modo la tua risposta è diversa da quella che ho menzionato nella mia domanda su 'stack exec'? Sto cercando un comando che esegua 'stack build' +' stack exec' su un progetto, analogamente a come mi ricordo di 'cabal run' farlo. – Wizek

6

È possibile utilizzare --exec per dire stack di quale programma deve essere eseguito dopo un successo costruito:

stack build --exec <executable-name> 

È inoltre possibile specificare gli argomenti per l'eseguibile, per esempio

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

Questo è probabilmente il più vicino si arriva paragonato a cabal run, dal momento che sia stack exec e la bandiera --exec bisogno di un nome del file eseguibile. La variante più pulita, tuttavia, sarebbe un comando stack-run aggiuntivo, ovvero stack build --exec <first-executable in .cabal>. Potrebbe valere a feature request sul tracker di problemi GitHub del progetto.

+1

A proposito, se hai installato sia lo stack _and_ cabal, puoi anche eseguire "stack build --exec" cabal run "". Ma è un po 'forzato. – Zeta