如何在另一个文件夹中执行命令并返回原始目录?

时间:2017-11-14 00:35:56

标签: linux bash unix

我在文件夹中使用此命令make

cd build/ && make 

但是我想在命令

之后返回原始目录

我试过了:

cd build/ && make && cd ..

但这不起作用。我该怎么做?有助于快速测试...

5 个答案:

答案 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 -