Domanda

Gli alias di seguito per l'esecuzione di Sunspot nel lavoro di sfondo Alias ​​di seguito per trovare e uccidere quelle istanze Work Env Variabili per le porte della macchia solare sono accessibili ma, le funzioni per l'esecuzione di macchie solari, il comando di elaborazione e l'uccisione di macchie solari funzionano solo dopo la fonte .Bashrc al di fuori della funzione .

$ user_id è impostato prima che questo sunpot_ports () venga chiamato e stampa correttamente quando l'accesso per la prima volta in rebash è un alias per la sorgente ~ .bashrc

Ho anche degli alias per lo sviluppo e la produzione: questo è solo un codice rappresentativo.

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

Ho provato a reperire .bashrc all'interno della funzione, sostituendo l'alias con il comando espanso e inserendo la funzione all'interno di sunspot_ports() in ogni combinazione.La porta Sunspot viene stampata correttamente quando accedo, quindi so che questo codice viene eseguito.

Inoltre, devo averlo come funzione in .bashrc invece che da qualche parte nel mio codice jruby poiché jvm non consente il fork (altrimenti userei semplicemente sunspot-solr start e sunspot-solr end nei miei test delle specifiche)

È stato utile?

Soluzione

bash risolverà l'alias solo se è già definito nel momento in cui viene inizialmente originata la funzione che lo invoca.Tuttavia, nel tuo caso, l'alias è definito in una funzione (sunspot_ports) e tale funzione non è stata eseguita in quel momento solr_test è di provenienza.

Hai un paio di opzioni:

  1. Invocare sunspot_ports prima di definire solr_test
  2. Sostituisci i tuoi alias con funzioni, ad esempio,
sunspot_kill_test()
{
   user -n tcp ${sunspot_test_port} -k
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top