如何将mkdir cd放入新创建的目录中?

我经常在bash中输入这些命令:

mkdir something cd something 

我几乎从不这样做:

 mkdir something ls # something in the current directory, not ./something/ 

从来没有这样:

 mkdir something something2 

如何将mkdir cd放入新创建的目录中? 我的意思是,如果我mkdir something ,比命令cd something之后立即执行。

例:

 $ pwd /home/me $ mkdir something $ pwd /home/me/something 

我建议创建一个函数:

 function mydir(){ mkdir -p "$1" && cd "$1"; } 

它可以做你想要的,你可以将它添加到.bashrc以便它可以在你的所有shell中使用。

  • $1是您发送给函数的第一个参数,即目录的名称。

您可以像以下一样使用它:

 $ mydir ~/my-new-directory $ pwd ~/my-new-directory 

注意:您可以使用mkdir更改mydir以覆盖它,但是我建议使用系统中不存在的自定义名称,如mydircmkdir ; 您可以使用type command检查命令是否存在。

使用命令的最后一个参数

您不必重新键入创建的目录的名称。 使用$_变量:

从bash 4.3手册:

  _ At shell startup, set to the absolute pathname used to invoke the shell or shell script being executed as passed in the environment or argument list. Sub‐ sequently, expands to the last argument to the pre‐ vious command, after expansion. 

因此用法如下:

 bash-4.3$ mkdir mydir bash-4.3$ cd $_ 

使用'{list;}’复合命令

如果我们只想使用一行,请将命令组合成复合命令{ (注意前面的前导空格{和每个命令的分号是必需的):

 bash-4.3$ pwd /home/xieerqi bash-4.3$ { mkdir mydir;cd $_;} bash-4.3$ pwd /home/xieerqi/mydir 

重要的是要注意,选择此{list;}复合命令结构是有原因的,因为列表中的所有命令都是在当前shell环境中执行的。

如果我们想要避免一遍又一遍地输入所有内容,我们可以使用它来制作别名。

 bash-4.3$ alias mkcd='{ IFS= read -rd && mkdir "$d" && cd "$d"; } <<<' bash-4.3$ pwd /home/xieerqi bash-4.3$ mkcd "mydir" bash-4.3$ pwd /home/xieerqi/mydir 

在这里我使用了"$d"变量,但我可以同样使用"$_"

 bash-4.3$ alias mkcd='{ IFS= read -rd && mkdir "$d" && cd "$_"; } <<<' 

我通常按​​照cd Alt +跟随mkdir something 使用上一个命令的最后一个参数(即目录名称)完成命令。

function

你可以创建一个小函数 ,你可以将它存储在~/.bashrc文件中。 编辑文件以添加以下行,

 md () { mkdir "$1" && cd "$1" } 

 source ~/.bashrc 

为了使更改在当前终端[窗口]中工作。 当您打开新终端时,新function将在那里。

在命令之间使用&&使cd命令仅在mkdir命令成功时运行。

示例:我可以使用像这样的函数md在当前目录中创建一个测试目录testdir (在本例中是我的主目录,如提示所示),

 sudodus@xenial32 ~ $ md testdir sudodus@xenial32 ~/testdir $ 

Bash shellscript没有像我预期的那样工作

我还将描述我为此目的使用一个小的bash shellcript的困难,因为其他人可能会尝试它并感到困惑。

您可以将shellcript存储在~/bin目录中。 创建~/bin并重新启动后,它将在PATH中。

使用任何标准命令都不使用的名称(例如mdscript ),

 #!/bin/bash mkdir "$1" && cd "$1" 

使脚本可执行

 chmod ugo+x ~/bin/mdscript 

这不符合预期

 mdscript testdir 

因为当前目录只在shell脚本的子进程中更改,但在完成shellcript后不在终端[window]中更改。

它在’sourced’时运行,使用命令行运行

 source mdscript testdir 

但这不方便,不是原来问题的好答案。

如果在shellcript中添加pwd命令,可以看到它是如何工作的

 #!/bin/bash mkdir "$1" && cd "$1" pwd 

并运行脚本mdscript

 sudodus@xenial32 ~ $ mdscript testdir /home/sudodus/testdir sudodus@xenial32 ~ $