Pregunta

Los alias a continuación para ejecutar manchas solares en el fondo de trabajo de trabajo a continuación para encontrar y matar esas instancias que trabajan las variables Env para los puertos de manchas solares son accesibles, pero las funciones para ejecutar manchas solares, el comando de procesamiento y matar solo la mancha solar funcionan después de que obtenga .BASHRC fuera de la función .

$ user_id se establece antes de que este sunspot_ports () se llama e imprime correctamente cuando iniciar sesión por primera vez es un alias para la fuente ~ .BASHRC

También tengo alias para el desarrollo y la producción, este es solo código representativo.

sunspot_ports ()
{  
  #alias sunspot_run_test to the user's port
  sunspot_test_port=$(($user_id +5300))
  echo "Your sunspot test port: $sunspot_test_port"
  alias sunspot_run_test="RAILS_ENV=test sunspot-solr run -p${sunspot_test_port} &"
  alias sunspot_kill_test="fuser -n tcp ${sunspot_test_port} -k"

  export sunspot_production_port sunspot_development_port sunspot_test_port
}

solr_test()
{
  #only makes the aliases be recognized when it is outside the function
  #rebash
  #aliases not recognized without a rebash prior to the function 
  sunspot_run_test
  #commands not recognized even with rebash
  #"RAILS_ENV=test sunspot-solr run -p${sunspot_test_port} &"
  sleep 10;
  "$@";
  sunspot_kill_test;
  #commands not recognized even with rebash
  #"fuser -n tcp ${sunspot_test_port} -k"
}

Intenté obtener .BASHRC dentro de la función, reemplazando el alias con el comando expandido y poniendo la función dentro de SunSpot_ports () en cada combinación. El puerto de Sunspot se imprime correctamente cuando inicia sesión, por lo que sé que este código se ejecuta.

Además, necesito tener esto como una función en .BASHRC en lugar de en algún lugar de mi código JRUBY, ya que el JVM no permite el bifurcación (de lo contrario, solo usaría SunSpot-Solr Start y Sunspot-SOnr en mis pruebas de especificaciones)

¿Fue útil?

Solución

Bash solo resolverá el alias si ya está definido en el momento en que la función invocar se obtiene inicialmente. Sin embargo, en su caso, el alias se define en una función (sunspot_ports), y esa función no se ha ejecutado por el momento solr_test se obtiene.

Tienes unas cuantas opciones:

  1. Invocar sunspot_ports Antes de definir solr_test
  2. Reemplace sus alias con funciones, por ejemplo,
sunspot_kill_test()
{
   user -n tcp ${sunspot_test_port} -k
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top