Question

J'ai écrit un wrapper bash sur Ruby qui passe par différentes étapes de configuration.

La version la plus basique est,

   #!/bin/bash 
   #   ruby_wrapper.sh
   ruby

Maintenant, je veux pouvoir utiliser ce wrapper comme un rubis ordinaire !Plus précisément, je souhaite créer un fichier .rb qui utilise cet "interprète".

   #!/path/to/ruby_wrapper.sh
   #  my_file.rb
   puts "hello world"

Alors je veux pouvoir faire $ ./my_file.rb au lieu de $ ruby_wrapper.sh my_file.rb

Est-ce possible?

Le Documentation prétend que ce n'est pas le cas.

Notez que l'interpréteur peut ne pas être lui-même un script d'interpréteur.

Mais je ne vois pas pourquoi.Quelqu'un a-t-il des idées pour contourner ce problème ?

Était-ce utile?

La solution

Essayez d'invoquer votre wrapper avec /usr/bin/env.C'est en fait une bonne pratique d'exécuter des scripts Ruby avec /usr/bin/env ruby car vous n'avez pas besoin de coder en dur le chemin d'accès au ruby binaire, ce n’est donc pas anormal.

$ cat ruby_wrapper.sh 
#!/bin/bash
exec ruby "$@"

$ cat wrapped.rb 
#!/usr/bin/env /tmp/ruby_wrapper.sh
puts "hello world"

$ ./wrapped.rb 
hello world

Aussi, en guise de remarque, voyez comment j'ai utilisé exec dans le script wrapper.Cela permettra à l'interpréteur Ruby de reprendre le processus de votre script wrapper plutôt que de s'exécuter en tant que processus enfant de votre script.Cela rend le wrapper transparent pour l'appelant (les signaux seront transmis directement à Ruby plutôt qu'à Bash, par exemple).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top