Псевдонимы 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
Источник.
У вас есть несколько вариантов:
- взывать
sunspot_ports
перед определениемsolr_test
- Замените свои псевдонимы функциями, например,
sunspot_kill_test () { пользователь -n tcp ${sunspot_test_port} -k }