我在文件夹中使用此命令make
:
cd build/ && make
但是我想在命令
之后返回原始目录我试过了:
cd build/ && make && cd ..
但这不起作用。我该怎么做?有助于快速测试...
答案 0 :(得分:6)
使用子shell,如下所示:
$ pwd
/tmp
$ (cd xyz && make)
$ pwd
/tmp
shell在使用括号运行命令之前分叉,所以一旦完成它就像你从未离开当前目录一样。
答案 1 :(得分:0)
听起来像你想要pushd and popd。
pushd
命令会将当前目录推送到堆栈,保存并允许您更改到其他目录。 popd
命令将从堆栈中弹出最后保存的目录。
答案 2 :(得分:0)
使用popd / pushd:
pushd build ; make ; popd
答案 3 :(得分:0)
我会提出以下命令:
cd $DIR && make && cd -;
在运行make后返回上一个目录,即使$ DIR中的路径很长,这也能正常工作。
如果您想使用更多高级工具,例如使用一堆已访问目录,您可以使用:
pushd, popd
用法:
$ pushd some_directory
It acts as a:
$ cd some_directory
except that some_directory is also added to the stack.
"$ pushd ~/TMP # we're in ~/
~/TMP ~
$ pushd ~/DATA # now we're in ~/TMP
~/DATA ~/TMP ~
$ pushd ~ # now we're in ~/DATA
~ ~/DATA ~/TMP ~
$ popd # now we're in ~/
~/DATA ~/TMP ~
$ popd # now we're in ~/DATA
~/TMP ~
$ popd # now we're in ~/TMP
~
$ # now we're in ~/"
另一个非常好的方法是我真正喜欢的这个功能:
"cd_func ()
{
local x2 the_new_dir adir index;
local -i cnt;
if [[ $1 == ""--"" ]]; then
dirs -v;
return 0;
fi;
the_new_dir=$1;
[[ -z $1 ]] && the_new_dir=$HOME;
if [[ ${the_new_dir:0:1} == '-' ]]; then
index=${the_new_dir:1};
[[ -z $index ]] && index=1;
adir=$(dirs +$index);
[[ -z $adir ]] && return 1;
the_new_dir=$adir;
fi;
[[ ${the_new_dir:0:1} == '~' ]] && the_new_dir=""${HOME}${the_new_dir:1}"";
pushd ""${the_new_dir}"" > /dev/null;
[[ $? -ne 0 ]] && return 1;
the_new_dir=$(pwd);
popd -n +11 2> /dev/null > /dev/null;
for ((cnt=1; cnt <= 10; cnt++))
do
x2=$(dirs +${cnt} 2>/dev/null);
[[ $? -ne 0 ]] && return 0;
[[ ${x2:0:1} == '~' ]] && x2=""${HOME}${x2:1}"";
if [[ ""${x2}"" == ""${the_new_dir}"" ]]; then
popd -n +$cnt 2> /dev/null > /dev/null;
cnt=cnt-1;
fi;
done;
return 0
}"
在您的个人资料/ bashrc中,别名cd到此功能:
alias cd=cd_func
然后你可以输入:
"$ cd --
0 ~
1 ~/DATA
2 ~/TMP"
to see all the directories you've visited. To go ~/TMP, for example, enter:
$ cd -2
答案 4 :(得分:0)
您可以使用以下命令
cd build;
make;
cd -