0

前言:我正在为 i3 编写一个基于tmuxinator的克隆,我是zsh用户。

我想在存在 .rvmrc 文件的给定目录中打开一个 xterm 窗口(或任何其他终端),然后启动一个(与 ruby​​ 相关的)命令。

这是一个示例场景:

➜  /tmp  irb
2.0.0p0 :001 > 
➜  /tmp  cat r/.rvmrc 
rvm --create use 1.9.3@cloudflo-cfu
➜  /tmp  cd r  
Using /home/user/.rvm/gems/ruby-1.9.3-p392 with gemset cloudflo-cfu
➜  r  irb
1.9.3p392 :001 >

正如你所看到的,我正在使用2.0.0系统红宝石,并1.9.3r/目录中。我想从其他地方在该目录中启动一个 xterm 窗口运行irb并在此之后保留终端。

从控制台我可以做到:

➜  /tmp  (cd /tmp/r && xterm -e "irb ; $SHELL ")&

这将起作用,但 rvm 加载是从当前终端完成的,并且这个技巧不能从脚本完成:

➜  /tmp  cat test/start1.sh 
 (cd /tmp/r && xterm -e "irb ; $SHELL ")&
➜  /tmp  ./test/start1.sh

2.0.0这将在版本中打开 irb 。

那么,我该如何实现呢?

更详细地说,我要做的是发现 i3-msg 实用程序的正确命令消息(我通过i3-py binding uwing使用i3.exec()

结果应该做以下事情:

  • 启动终端(xterm最好)
  • 转到加载了 rvm 函数的给定目录(或 rvm 的cd 包装函数的解决方法)
  • 启动命令(irb适合测试)
  • 启动$SHELL以防止终端在退出后关闭irb
4

1 回答 1

1

这个命令应该这样做:

( cd /tmp/r ; xterm -e $SHELL -l -c "irb ; $SHELL" )&

它将切换到目录,首先xterm在其中运行 login( -l) shell( $SHELL) 并要求它执行( -c)irb

于 2013-10-01T20:38:28.580 回答