我怎样才能让 mkdir cd 进入新创建的目录?

我怎样才能让 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

答案1

使用命令的最后一个参数

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

来自 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 -r d && 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 -r d && mkdir "$d" && cd "$_"; } <<<'

答案2

我建议创建一个函数:

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

它可以满足您的需要,您可以将它添加到您的.bashrc所有 shell 中,以便它可以在您的所有 shell 中使用。

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

你可以像这样使用它:

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

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

答案3

我通常会mkdir somethingcdAlt + .前一个命令的最后一个参数(即目录名)来完成该命令。

答案4

功能

你可以做一个小功能,您可以将其存储在文件中~/.bashrc。编辑文件以添加以下行,

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

跑步

source ~/.bashrc

以使更改在当前终端 [窗口] 中生效。当您打开新终端时,新功能将会出现。

使用&&命令之间的区别在于,cd只有mkdir命令成功执行时,命令才会运行。

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

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

Bash shellscript 未按预期工作

我也会用一个小例子来描述我的困难bash 脚本为了这个目的,因为其他人可能会尝试并感到困惑。

您可以在目录中存储 shell 脚本~/bin。创建~/bin并重启后,它将位于 PATH 中。

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

#!/bin/bash

mkdir "$1" && cd "$1"

使脚本可执行

chmod ugo+x ~/bin/mdscript

这不能按预期工作

mdscript testdir

因为当前目录只在shell脚本的子过程中发生了改变,而在完成shell脚本后在终端[窗口]中没有改变。

它在“sourced”时有效,使用命令行运行

source mdscript testdir

但这并不方便,不是对原始问题的好答案。

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

#!/bin/bash

mkdir "$1" && cd "$1"
pwd

并运行脚本mdscript

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

相关内容