2014-09-21 47 views
0

如何从一个不同的目录运行Linux shell命令而不需要实际到达那里?如何从不同的目录运行Linux shell命令而不去那里?

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

[email protected]:~$ ~/my/source/code/directory/make #This is wrong! 

我见过一些例子表明为:

[email protected]:~$ cd ~/my/source/code/directory; make 

但是,这最终把我带入那个我想避免的源代码目录。

有可能的是另一种选择:

[email protected]:~$ cd ~/my/source/code/directory; make; cd ~ 

但它成为CESE复杂。

我想知道是否可以有比这些更好,更简单的方法吗?

+0

可能的重复[如何使用不同的工作目录从当前的Linux shell运行程序?](http ://stackoverflow.com/questions/786376/how-do-i-run-a-program-with-a-different-working-directory-from-current-from-lin) – Madivad 2016-02-11 13:26:57

+0

@Madivad,感谢您指点。要知道,[虽然不能这样做](http://meta.stackoverflow.com/questions/265736/should-i-delete-my-question-if-it-is-marked-as-a-duplicate)没有:| – tod 2016-02-11 15:52:58

+0

这很酷,我不想让它消失,只是链接 – Madivad 2016-02-11 21:21:02

回答

7

你可以试试:

[email protected]:~$ (cd ~/my/source/code/directory; make) 

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

5

在一个子壳中,例如

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

或者,你可以用化妆的-C选项,例如

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

'make -C'确实是正确的方法 – 2014-09-21 10:50:14

+0

+1 for''-C' – tod 2014-09-21 11:41:14

+2

要小心'make -C'是不可移植的因为'make'实现不是必需的(POSIX )来支持它,另一方面'(cd ...; make)'是绝对可移植的 – jlliagre 2014-09-21 12:11:26

2

您还可以使用

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

current=`pwd`; cd ~/my/source/code/directory; make; cd "$current" 
0
$ (cd directory && make) 

您需要使用&&而不是;。考虑像

cd junk && rm -rf * 

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