2010-04-11 6 views
7

J'ai transpiré sur la question ci-dessus. La réponse que je vais fournir m'a pris un certain temps à rassembler, mais il semble toujours désespérément primitif et hacky par rapport à ce que l'on pouvait faire étaient l'achèvement d'être redessiné pour être moins statique. J'ai presque peur de demander s'il y a une bonne raison pour laquelle la logique d'achèvement semble être complètement séparée du programme pour lequel elle se termine.Comment regrouper bash achèvement avec un programme et le faire fonctionner dans le shell en cours?

Répondre

8

J'ai écrit une bibliothèque de ligne de commande (peut être vu in scala trunk) qui vous permet de retourner un commutateur pour avoir une option "--bash". Si vous exécutez

./program --bash 

Il calcule le fichier d'achèvement, l'écrit sur un tempfile, et fait écho à

. /path/to/temp/file 

à la console. Le résultat est que vous pouvez utiliser comme si les apostrophes inverses:

`./program --bash` 

et vous aurez terminé pour « programme » dans le shell courant car elle la source du tempfile.

Pour un exemple concret: vérifiez le coffre de scala et exécutez test/partest.

+3

Vous pouvez vous débarrasser de fichier temprary en utilisant ici chaînes: Source/dev/stdin <<< "$ (programme --bash ./)" –

+0

Oui, je l'avais rencontré, mais dans la formulation j'ai vu cela n'a pas fonctionné sur OSX. Le vôtre! Merci beaucoup. – extempore

+0

En date du 2017-10-06 le lien est mort – Morgen

Questions connexes