2014-09-21 53 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不存在,您將刪除當前目錄中的所有內容:(

相關問題