我想在/home/user/git/app/目录中执行类似'git tag -l‘的命令,但实际上我在/home/user中。如何在不更改工作目录的情况下在bash中做到这一点?
所以不是:
cd /home/user/git/app && git tag -l
因为这实际上更改了我的工作目录,并且必须再次执行'cd /home/user‘。
发布于 2010-01-26 01:49:20
把整件事都括起来就行了。这将在一个子subshell中运行它,该子subshell可以转到任何目录,而不会影响您的“当前工作”目录。下面是一个例子。
noufal@sanctuary% pwd
/tmp/foo
noufal@sanctuary% (cd ../bar && pwd && ls -a )
/tmp/bar
./ ../
noufal@sanctuary% pwd
/tmp/foo
noufal@sanctuary%
发布于 2010-01-26 02:43:48
这是另一种解决方案:使用pushd切换目录,然后使用popd返回:
pushd /home/user/git/app && git tag -l; popd
发布于 2010-01-26 01:48:19
如果有问题的命令总是git命令,那么您应该只使用--git-dir
和--work-tree
选项来告诉git要做什么!(或者,如果您在脚本过程中经常执行此操作,请将变量GIT_DIR和GIT_WORK_TREE设置为适当的路径)
如果这是一个一般性的问题,我相信Andrzej有一个最好的建议:使用子subshell。不过,启动subshell的正确方法是使用括号,而不是使用命令替换(除非您确实想要捕获输出):
( cd $dir && run_command )
另一种解决方案,如Felix和ibread所建议的,当然可以工作,但一定要小心-如果您正在执行的命令可能是一个外壳函数,那么它也可以cd,并在最后更改cd -
的效果。在一般情况下,最安全的做法是首先将当前目录存储在一个变量中。
https://stackoverflow.com/questions/2134259
复制相似问题