Pergunta

Eu escrevi um wrapper bash para Ruby que passa por várias etapas de configuração.

A versão mais básica é,

   #!/bin/bash 
   #   ruby_wrapper.sh
   ruby

Agora quero poder usar esse wrapper como o Ruby normal!Especificamente, quero criar um arquivo .rb que use esse "intérprete".

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

Então eu quero ser capaz de fazer $ ./my_file.rb em vez de $ ruby_wrapper.sh my_file.rb

Isso é possível?

O documentação afirma que não é.

Observe que o próprio intérprete pode não ser um script de intérprete.

Mas não vejo por que não.Alguém tem alguma idéia para contornar isso?

Foi útil?

Solução

Tente invocar seu wrapper com /usr/bin/env.Na verdade, é uma boa prática executar scripts Ruby com /usr/bin/env ruby já que você não precisa codificar o caminho para o ruby binário, então isso não é antinatural.

$ 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

Também como observação lateral, veja como usei exec no script do wrapper.Isso permitirá que o interpretador Ruby assuma o processo do seu script wrapper em vez de executá-lo como um processo filho do seu script.Isso torna o wrapper transparente para o chamador (os sinais serão entregues diretamente ao Ruby em vez de ao bash, por exemplo).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top