首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从特定目录执行命令,而不实际切换到该目录

如何从特定目录执行命令,而不实际切换到该目录
EN

Stack Overflow用户
提问于 2010-01-26 01:37:14
回答 5查看 11.4K关注 0票数 18

我想在/home/user/git/app/目录中执行类似'git tag -l‘的命令,但实际上我在/home/user中。如何在不更改工作目录的情况下在bash中做到这一点?

所以不是:

代码语言:javascript
复制
cd /home/user/git/app && git tag -l

因为这实际上更改了我的工作目录,并且必须再次执行'cd /home/user‘。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-26 01:49:20

把整件事都括起来就行了。这将在一个子subshell中运行它,该子subshell可以转到任何目录,而不会影响您的“当前工作”目录。下面是一个例子。

代码语言:javascript
复制
noufal@sanctuary% pwd
/tmp/foo
noufal@sanctuary% (cd ../bar && pwd && ls -a )
/tmp/bar
./  ../
noufal@sanctuary% pwd
/tmp/foo
noufal@sanctuary%            
票数 38
EN

Stack Overflow用户

发布于 2010-01-26 02:43:48

这是另一种解决方案:使用pushd切换目录,然后使用popd返回:

代码语言:javascript
复制
pushd /home/user/git/app && git tag -l; popd
票数 7
EN

Stack Overflow用户

发布于 2010-01-26 01:48:19

如果有问题的命令总是git命令,那么您应该只使用--git-dir--work-tree选项来告诉git要做什么!(或者,如果您在脚本过程中经常执行此操作,请将变量GIT_DIR和GIT_WORK_TREE设置为适当的路径)

如果这是一个一般性的问题,我相信Andrzej有一个最好的建议:使用子subshell。不过,启动subshell的正确方法是使用括号,而不是使用命令替换(除非您确实想要捕获输出):

代码语言:javascript
复制
( cd $dir && run_command )

另一种解决方案,如Felix和ibread所建议的,当然可以工作,但一定要小心-如果您正在执行的命令可能是一个外壳函数,那么它也可以cd,并在最后更改cd -的效果。在一般情况下,最安全的做法是首先将当前目录存储在一个变量中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2134259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档