2017-02-21 8 views
1

J'ai besoin d'avoir la fonction fish accept pour un argv. Quelque chose comme,Comment avoir l'option argv dans la fonction shell du poisson?

myProg <command> <options> 

Actuellement i ont la fonction suivante

function myProg 
     java -jar "/Users/username/myProg/myprog-0.2.jar" "$argv" 
end 

je dois envoyer la commande suivante de mon terminal

myProg vm start 

Pouvez-vous s'il vous plaît aider à la façon de réécrire la fonction pour accepter les options?

Merci ..

Répondre

6

Dans les variables de poissons comme sont des tableaux et quand interpolée dans une commande ne doivent pas être enfermés dans des guillemets doubles, sauf si vous voulez concaténer les valeurs en une seule chaîne. En d'autres mots définissent simplement votre fonction comme ceci:

function myProg 
    java -jar "/Users/username/myProg/myprog-0.2.jar" $argv 
end 
+0

Il convient de noter que les citations, les poissons ne les rend pas une seule chaîne, il met en fait des guillemets autour de chacun des arguments, donc, commencer 'MONPROG vm 'lancera java -jar" /path/thing.jar "" vm "" start "'. – emma

+0

Non, ce n'est pas le cas. Il les transforme en une seule chaîne, avec des espaces entre l'élément de la liste. Voir par exemple 'set liste foo bar; printf "% s \ n" "$ list" '. – faho

+0

faho est correct, emma. Je pense que vous pensez au comportement de la construction '" $ @ "' dans les shells POSIX compatibles. Le poisson ne le supporte pas car il n'a pas besoin d'avoir une sémantique d'interpolation de variable saner. –