我正在寻找一种方法来创建目录,并仅使用单个命令将当前工作目录更改为新创建的目录。我该怎么做?
即不要这样做
user@Computer:~$ mkdir NewDirectory
user@Computer:~$ cd NewDirectory
user@Computer:~/NewDirectory$
我想要做
user@computer:~$ **command** NewDirectory
user@Computer:~/NewDirectory$
什么可以命令是?
答案1
如果你真的希望它只是一个命令,我建议在你的命令中添加如下内容.bashrc
:
md () { mkdir -p "$@" && cd "$1"; }
md foo
然后,在命令行中输入将立即创建一个名为的目录foo
,并cd
进入其中。请记住,您必须重新加载.bashrc
才能使更改生效(即打开新控制台或运行source ~/.bashrc
)。
参见http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time寻找可能的替代方案。
答案2
mkdir "NewDirectory" && cd "NewDirectory"
- 仅当第一个命令成功时,后面的部分
&&
才会执行。 - 它被称为命令列表在 Bash 手册中。
还有一个简写版本:
mkdir "NewDirectory" && cd "$_"
命令行示例:
$ false && echo "yes" $ true && echo "yes" yes
(编辑)在命令中添加“因为目录可能包含空格。
答案3
没有内置函数可以实现这一点,但是你可以使用 shell 功能来帮助你cd
在运行后不必再次键入命令的参数mkdir
:
- 键入
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
}
答案4
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