我正在尝试创建一个可以从命令行运行的文件:
.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`
这不会让您返回所需的目录,但也许会有帮助。