Приведенные ниже псевдонимы для запуска sunspot в фоновом режиме работают. Приведенные ниже псевдонимы для поиска и уничтожения этих экземпляров работают. Переменные ENV для портов sunspot доступны. .
$user_id устанавливается перед вызовом этого sunspot_ports() и печатается правильно, когда первый вход в rebash является псевдонимом для источника ~.bashrc
У меня также есть псевдонимы для разработки и производства - это просто репрезентативный код.
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"
}
Я попытался найти .bashrc внутри функции, заменив псевдоним расширенной командой и поместив функцию внутри sunspot_ports() в каждой комбинации. Порт солнечных пятен выводится правильно, когда я вхожу в систему, поэтому я знаю, что этот код запускается.
Кроме того, мне нужно иметь это как функцию в .bashrc, а не где-то в моем коде jruby, поскольку jvm не допускает разветвления (в противном случае я бы просто использовал sunspot-solr start и sunspot-solr end в моих тестах спецификаций)