Question

Alias ci-dessous pour l'exécution de taches solaires dans le travail de fond Alias ci-dessous pour trouver et tuer ces instances Des variables d'environnement pour les taches solaires, les ports sont accessibles Mais, Fonctions pour l'exécution de taches solaires, traitement de commande, et de tuer les taches solaires fonctionnent uniquement après que j'ai de la source .bashrc à l'extérieur de la fonction.

$user_id est définie avant cette sunspot_ports() est appelée et s'imprime correctement lors de votre première connexion rebash est un alias pour la source ~.bashrc

J'ai alias pour le développement et la production aussi bien - c'est juste représentatif de code.

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"
}

J'ai essayé de sourcing .bashrc l'intérieur de la fonction, en remplacement de l'alias avec la commande étendue, et de mettre la fonction à l'intérieur de sunspot_ports() dans chaque combinaison.La tache de port imprime correctement lorsque je me connecte, donc je sais que ce code est exécuté.

Aussi, j'ai besoin d'une fonction de dans .bashrc au lieu de quelque part dans mon jruby code depuis la jvm ne permet pas de faire un fork (sinon, je voudrais juste utiliser de taches solaires-solr de début et de taches solaires-solr fin dans mon spec tests)

Était-ce utile?

La solution

bash ne résoudre l'alias s'il est déjà défini à l'époque que la fonction invoquant est d'abord source.Cependant, dans votre cas, l'alias est défini dans une fonction (sunspot_ports), et que la fonction n'a pas été exécutée par le temps solr_test proviennent.

Vous avez deux options:

  1. Invoquer sunspot_ports avant de définir solr_test
  2. Remplacer vos alias avec des fonctions, par exemple,
sunspot_kill_test()
{
   user -n tcp ${sunspot_test_port} -k
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top