以下是在后台工作中运行太阳黑子的别名 下面用于查找和查杀这些实例的别名有效 可以访问太阳黑子端口的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 )
答案 0 :(得分:1)
bash只会解析别名,如果它已在最初获取函数调用时已定义。但是,在您的情况下,别名是在函数(sunspot_ports
)中定义的,并且该函数在solr_test
来源时尚未运行。
您有几个选择:
sunspot_ports
solr_test
sunspot_kill_test() { user -n tcp ${sunspot_test_port} -k }