想要在 bash 脚本中 cd 然后运行“git checkout”

想要在 bash 脚本中 cd 然后运行“git checkout”

我正在尝试创建一个可以从命令行运行的文件:

.bashrc

export gorepo="cd /home/pol/dcu/practicum/gitrep"

并且

alias gorepo="/home/pol/dcu/practicum/gitrep"

然后在 $PATH 上的可执行文件中

#!/bin/bash
gorepo # gorepo is defined in .bashrc
git checkout

我已经尝试了导出、别名以及使用 shell 变量和 bash 函数的各种组合,但均无济于事 - 我束手无策!

如何创建一个命令,只需 cd 进入我的存储库,然后运行 ​​git checkout 并将我返回到存储库目录中的 shell?

答案1

这声明了一个名为 的变量,gorepo其中包含文字文本cd /home/pol/dcu/practicum/gitrep

export gorepo="cd /home/pol/dcu/practicum/gitrep"

gorepo这声明了一个运行该程序的命令(别名)/home/pol/dcu/practicum/gitrep

alias gorepo="/home/pol/dcu/practicum/gitrep"

这尝试使用未在 shell 脚本上下文中定义的别名:

#!/bin/bash
gorepo # gorepo is defined in .bashrc
git checkout

我认为你想要的是这个程序,它将改变目录在脚本执行期间并检查你的代码:

#!/bin/bash
cd /home/pol/dcu/practicum/gitrep
git checkout

或者这个别名(适用于.bashrc),它将更改当前 shell 上下文中的目录,然后检查您的代码:

alias gorepo='cd /home/pol/dcu/practicum/gitrep && git checkout'

答案2

什么cd是:改变当前shell的工作目录。当您启动脚本时,会启动另一个 shell(进程)来执行该脚本。shell 进程在执行时成功更改工作目录cd,但是当脚本结束时,您将回到启动脚本的前一个 shell。

解决这个问题的方法是:

1)通过“采购”运行脚本,使用以下任一方法:

bash$ source yourscript

或(完全相同):

bash$ . yourscript

这将在当前 shell 中运行脚本,因此cd将更改该进程的目录,从而在脚本结束后仍然有效。

2) 定义别名。别名命令也会在当前 shell 进程中执行。请参阅 roaima 的回答如何执行此操作。

答案3

我不知道这是否是您真正想要的,或者您是否认为这是您打算做的事情的最佳解决方案。

git 有-C <repopath> <command> <branch>

在旅游案例中

git -C /home/pol/dcu/practicum/gitrep checkout master`

这不会让您返回所需的目录,但也许会有帮助。

相关内容