如何在 ubuntu 中启动 bash shell - 更改目录、打开选项卡、运行命令

如何在 ubuntu 中启动 bash shell - 更改目录、打开选项卡、运行命令

我确信这不会像我发现的那么难!

当我登录到我的机器时,我希望它在给定的目录中启动一个 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

有一个非常好的解决方案:

https://stackoverflow.com/questions/3896882/open-gnome-terminal-programmatically-and-execute-commands-after-bashrc-was-execut

引用自链接:

这是我们在 Superuser 上研究出的一个好办法

  1. 在 .bashrc 末尾添加 eval "$BASH_POST_RC"

  2. 将每个选项卡的 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

.bashrcbash使用参数调用时不会被调用-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'

相关内容