代码之家  ›  专栏  ›  技术社区  ›  maximusdooku

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

  •  3
  • maximusdooku  · 技术社区  · 8 年前

    我使用此命令 make

    cd build/ && make 
    

    我试过这个:

    cd build/ && make && cd ..
    

    5 回复  |  直到 8 年前
        1
  •  9
  •   PhilR    5 年前

    使用子shell,如下所示:

    $ pwd
    /tmp
    
    $ (cd build && make)
    
    $ pwd
    /tmp
    

    shell在运行括号中的命令之前分叉,因此一旦它完成,就好像您从未离开过当前目录一样。

        2
  •  2
  •   Richard Chambers    8 年前

    pushd and popd .

    这个 pushd 命令将当前目录推送到堆栈上,保存它并允许您更改到其他目录。这个 popd 命令将从堆栈中弹出最后保存的目录。

        3
  •  0
  •   Ipor Sircer    8 年前

    使用popd/pushd:

    pushd build ; make ; popd
    
        4
  •  0
  •   Allan    8 年前

    我建议执行以下命令:

    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
    
        5
  •  0
  •   user101289    8 年前

    您可以使用以下命令

    cd build; 
    make;
    cd -
    
    推荐文章