Псевдонимы bash, не распознаваемые функцией bash: sunspot_rails, jruby, rspec

Приведенные ниже псевдонимы для запуска 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 в моих тестах спецификаций)

1 ответ

Решение

bash разрешит псевдоним только в том случае, если он уже определен во время первоначального вызова вызывающей функции. Однако в вашем случае псевдоним определяется в функции (sunspot_ports), и эта функция не была запущена к тому времени solr_test Источник.

У вас есть несколько вариантов:

  1. взывать sunspot_ports перед определением solr_test
  2. Замените свои псевдонимы функциями, например,
sunspot_kill_test ()
{
   пользователь -n tcp ${sunspot_test_port} -k
}
Другие вопросы по тегам