псевдонимы bash не распознаются функцией bash: sunspot_rails, jruby, rspec - PullRequest
1 голос
/ 07 декабря 2011

Псевдонимы ниже для запуска солнечного пятна в фоновом режиме Псевдонимы ниже для нахождения и убийства этих экземпляров работают Переменные ENV для портов солнечных пятен доступны Но, Функции для запуска sunspot, команды обработки и уничтожения sunspot работают только после того, как я отправлю .bashrc за пределы функции.

$ 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 и конец sunspot-solr в моих тестах спецификаций ) * +1010 *

1 Ответ

1 голос
/ 08 декабря 2011

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

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

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