bash函数无法识别bash别名:sunspot_rails,jruby,rspec

时间:2011-12-07 16:32:29

标签: jrubyonrails sunspot-rails bash bash-function

以下是在后台工作中运行太阳黑子的别名 下面用于查找和查杀这些实例的别名有效 可以访问太阳黑子端口的ENV变量 但, 运行太阳黑子,处理命令和杀死太阳黑子的函数仅在我在函数外部使用.bashrc后才能工作。

$ user_id在此之前设置 第一次登录时,sunspot_ports()被调用并正确打印 rebash是source~.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 个答案:

答案 0 :(得分:1)

bash只会解析别名,如果它已在最初获取函数调用时已定义。但是,在您的情况下,别名是在函数(sunspot_ports)中定义的,并且该函数在solr_test来源时尚未运行。

您有几个选择:

  1. 在定义sunspot_ports
  2. 之前调用solr_test
  3. 用函数替换别名,例如,
  4. sunspot_kill_test()
    {
       user -n tcp ${sunspot_test_port} -k
    }