我确信这不会像我发现的那么难!
当我登录到我的机器时,我希望它在给定的目录中启动一个 bash shell,打开并命名一些选项卡,然后在每个选项卡中启动一个进程。
我认为如果我把
cd ~/xxx/xxx/xxx
在 .bashrc 中,然后使用类似以下命令自动启动 bash shell
gnome-terminal --tab -e "bash -c 'rails s'" --tab -e "bash -c 'spork'" --tab -e "bash -c 'autotest'" --tab -e "bash -c 'rails c'" --tab -e 'tail -f log/development.log'
它应该起作用
它没有 - 我收到“为此终端创建子进程时出错,无法执行子进程‘rails’(没有这样的文件......
rails 在路径中 - 在根目录和目标目录中,提供完整路径没有帮助 - 终端窗口没有打开。
更新:这不能按预期工作的原因是,bashrc 在执行启动进程的命令之前不会更改工作目录。(如果我执行 tab -e 'pwd',我可以看到这一点)
所以真正的问题是,我如何才能更改目录然后启动进程?
答案1
有一个非常好的解决方案:
引用自链接:
这是我们在 Superuser 上研究出的一个好办法
在 .bashrc 末尾添加 eval "$BASH_POST_RC"
将每个选项卡的 BASH_POST_RC 环境变量设置为您想要执行的命令,例如:gnome-terminal --working-directory="/home/zardoz/projects/my_rails_app" --tab -e 'bash -c "export BASH_POST_RC=\"rails server\"; exec bash"' --tab -e 'bash -c "export BASH_POST_RC=\"autotest\"; exec bash"'
@Gilles:感谢您的解决方案!
我使用这个想法创建了以下 bash 脚本。
gnome-terminal --working-directory="/home/用户/rails_projects/项目" --tab --title=Terminal --profile=Rails --tab --profile=Rails --title=Console -e 'bash -c "export BASH_POST_RC=\"rails console\"; exec bash"' --tab --profile=Rails --title=Guard -e 'bash -c "export BASH_POST_RC=\"guard\"; exec bash"' --tab --profile=Rails --title=Server -e 'bash -c "export BASH_POST_RC=\"rails server\"; exec bash"' --tab --profile=Rails --title=Tail -e 'bash -c "export BASH_POST_RC=\"tail -f log/development.log\"; exec bash"'
答案2
.bashrc
bash
使用参数调用时不会被调用-c
。
相反,你可以将调用包装gnome-terminal
在执行第一个操作的脚本中cd
。有些像这样:
#!/bin/bash
cd ~/xxx/xxx/xxx
gnome-terminal --tab -e "bash -c 'rails s'" --tab -e "bash -c 'spork'" --tab -e "bash -c 'autotest'" --tab -e "bash -c 'rails c'" --tab -e 'tail -f log/development.log'