如何从不同的目录运行Linux shell命令而不到达那里?

时间:2014-09-21 10:36:57

标签: linux bash shell

如何在不实际访问的情况下从其他目录运行Linux shell命令?

在下面,我想运行make命令,但不进入源代码目录,即从我的主目录:

me@mypc:~$ ~/my/source/code/directory/make  #This is wrong!

我看到一些例子表明:

me@mypc:~$ cd ~/my/source/code/directory; make

但这最终将我带入了我想避免的源代码目录。

可能还有另一种选择:

me@mypc:~$ cd ~/my/source/code/directory; make; cd ~

但是它变得复杂了。

我想知道是否有某种方式比这些更好更简单?

4 个答案:

答案 0 :(得分:8)

您可以尝试:

me@mypc:~$ (cd ~/my/source/code/directory; make)

括号告诉你的shell生成一个单独的子shell,它有自己的当前目录,并在子shell中运行命令。命令完成后,子shell关闭,然后返回到主shell,其当前目录永远不会更改。

答案 1 :(得分:5)

在子shell中执行此操作,例如

(cd ~/my/source/code/directory; make)

或者,您可以使用make -C选项,例如

make -C ~/my/source/code/directory

答案 2 :(得分:2)

您也可以使用

pushd ~/my/source/code/directory; make; popd

current=`pwd`; cd ~/my/source/code/directory; make; cd "$current"

答案 3 :(得分:0)

$ (cd directory && make)

您需要使用&&代替;。考虑像

这样的东西
cd junk && rm -rf *

使用&&,如果目录junk不存在,bash将中止。如果您尝试cd junk; rm -rf *并且junk不存在,您将删除当前目录中的所有内容:(