0
votes

Tuyauterie deux commandement de Makefile ne fonctionne pas

J'utilise les commandes suivantes dans mon Makefile xxx

dans les commandes im obtenir une éventuelle des valeurs et supprimer le tableau [] de celui-ci,

Je veux exécuter cette commande dans mon terminal et que j'utilise le suivant

FZR fournit des applications | (STI] , $ (STI [ $ (apps))) | $ (applications)

et j'ai eu une erreur xxx

Qu'est-ce que je manque ici?

Si je cours Seul

FZR fournit des applications

i got, qui fonctionne

[app1 app2 app3] < / p>

L'idée est d'inspecter la commande

apps: = $ (poste] , $ (apps))))

qui fonctionne sur Mac mais dans Windows, il est pas ...


3 commentaires

Essayez-vous d'exécuter cette commande sur Windows? Comment avez-vous configuré bash là-bas? Windows a sa propre langue de commande (deux d'entre elles, en fait), mais bash n'est pas l'un d'entre eux par défaut.


@Jennym: Le message d'erreur signifie que vous souhaitez exécuter une commande nommée apps , et il n'y a pas de fichier exécutable de ce nom dans n'importe quel répertoire répertorié dans votre chemin, ni une fonction ou un alias . Dans une première étape, j'éditionnerais la valeur de la cheminée au moment de l'exécution de la commande et vérifiez si ce fichier est présent et que le jeu X-Bit est présent.


@Jennym: Mise à côté de cela, même si leur commande était une commande de ce nom dans le chemin, l'expression $ (applications) est un peu inhabituelle: elle signifie appelez la commande applications / B> et traiter le stdout de cette commande comme nom d'une nouvelle commande, appelé ensuite et reçoit l'entrée du tuyau ... Êtes-vous sûr que c'est ce que vous vouliez faire?


3 Réponses :


2
votes

Les commandes valides dans un maquefile ne sont pas valides sur l'invite du terminal.

Si vous souhaitez supprimer les supports carrés de début et de fuite dans un script Bash, essayez P>

apps := $(shell fzr provide apps | sed 's/^\[//;s/\]$$//')


6 commentaires

Merci, je vais l'essayer et vous le faire savoir :), au fait, je téléchargea Windows à partir d'ici, gnuwin32.sourceforge.net/packages/make.htm est compatible?


Je n'ai aucun moyen de le tester mais la page de couverture dit que c'est GNU.


Si je veux utiliser cela dans Makefile, FZR Fournissez des applications | SED 'S / ^ \ [//; S / \] $ //' Cela devrait fonctionner?


J'ai mis à jour ma réponse pour couvrir cela il y a environ une minute (^:


Merci quand je l'essaie dans mon makefile, je reçois Commande inconnue SED :(


Le fichier Makefile ne peut évidemment pas utiliser de commandes qui ne sont pas installées sur votre boîte Windows. Il n'est pas difficile de trouver un fichier SED s'il est peut-être plus simple de revenir au $ (STI ...) si vous souhaitez éviter de tirer beaucoup de dépendances. Il n'y a pas de moyen sain de créer un Makefile portable entre Windows et les ordinateurs réels, cependant.



1
votes

Voici une version plus courte du script que @triplee a affiché: xxx

ceci supprime [ ou ] caractères où ils apparaissent dans la chaîne d'entrée.


0 commentaires

1
votes

dans votre maquillage, $ (applications) code> se développe à la valeur de la variable Makefile apps code>. Ceci est fait au moment de la lecture de Makefile, et la valeur est substituée avant que la commande shell ne soit exécutée (la coque ne voit jamais $ (applications) code>, mais plutôt voit Appval1 code>, ou Quelles que soient les applications.

dans la coquille, (je suppose une coquille Bash), $ (applications) code> signifie la commande exécutée apps code>. Si vous voulez le valeur de la variable de shell que vous devez utiliser $ {apps} code>. De plus, $ (STI) code> est une construction de fabrication et la coquille ne comprend pas non plus que Vous devez remplacer cela avec quelque chose (probablement sed code>). p>

Donc, dans ce cas, vous devez faire quelque chose comme: p>

fzr provide apps | sed "s/[][]//g"


0 commentaires