如何在不实际访问的情况下从其他目录运行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 ~
但是它变得复杂了。
我想知道是否有某种方式比这些更好更简单?
答案 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
不存在,您将删除当前目录中的所有内容:(