如何创建目录并将工作目录更改为新目录?
我正在寻找一种方法来创建目录,并使用单个命令将我当前的工作目录更改为新创建的目录。 我怎样才能做到这一点?
即而不是做
user@Computer:~$ mkdir NewDirectory user@Computer:~$ cd NewDirectory user@Computer:~/NewDirectory$
我想要做
user@computer:~$ **command** NewDirectory user@Computer:~/NewDirectory$
命令可以是什么?
如果你真的希望它只是一个命令,我建议你的.bashrc
添加这样的东西:
md () { mkdir -p "$@" && cd "$1"; }
然后在命令行上输入md foo
将创建一个名为foo
的目录,然后立即将cd
插入其中。 请记住,您必须重新加载.bashrc
才能使更改生效(即打开新控制台或运行source ~/.bashrc
)。
mkdir "NewDirectory" && cd "NewDirectory"
-
&&
后面的部分只有在第一个命令成功时才会执行。 - 它在Bash手册中称为命令列表 。
-
还有一个速记版本:
mkdir "NewDirectory" && cd "$_"
-
命令行示例:
$ false && echo "yes" $ true && echo "yes" yes
-
(编辑)添加“到命令,因为目录可能包含空格。
没有内置函数,但您可以使用shellfunction来帮助您在运行mkdir
后不必再次键入cd
命令的参数:
- 键入
cd
,然后键入Esc 。 (或Alt + 。 )插入上一个命令的最后一个参数。 -
cd !$
在上一个命令的最后一个参数上执行cd
。 - 按Up调出上一个命令行,然后编辑它以将
mkdir
更改为cd
。
您可以在~/.bashrc
定义一个简单的make-and-change-directory函数:
mkcd () { mkdir "$1" && cd "$1"; }
重新加载.bashrc
( . ~/.bashrc
)或重新启动bash,现在可以输入mkcd new-directory
。
这个简单版本在一些不寻常的情况下失败,涉及奇怪的目录名称或..
和符号链接。 这是一个。 有关说明,请参阅此问题的Unix和Linux版本 。
mkcd () { case "$1" in /*) mkdir -p "$1" && cd "$1";; */../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "$1";; ../*) (cd .. && mkdir -p "${1#.}") && cd "$1";; *) mkdir -p "./$1" && cd "./$1";; esac }
mkdir -p "as/many dirs/as you/want" && cd "$_"
有一个上面列出的解决方案(与我的解决方案相同,但没有-p选项),但我认为它有一些陷阱。
man mkdir ... -p, --parents no error if existing, make parent directories as needed ...
这给我们带来了两个好处:
- 我们可以一次创建尽可能多的子目录
- 如果该目录存在,它将不会抛出错误,我们仍然可以切换到现有目录。
&& cd "$_"
将更改为新创建的目录,因为$_
保存返回我的mkdir
的值