42

我只搜索一个命令——没有&&或没有|——它创建一个目录,然后立即将您的当前目录更改为新创建的目录。(这是某人为他的“linux-usage”考试而得到的一个问题,他做了一个新命令来做到这一点,但这并没有给他分数。)如果重要的话,这是在 debian 服务器上。

4

9 回答 9

61

我相信你正在寻找这个:

mkdir project1 && cd "$_"
于 2014-11-03T19:36:06.290 回答
32

为此目的在您的例如定义一个bash函数$HOME/.bashrc

 function mkdcd () {
     mkdir "$1" && cd "$1"
 }

然后输入mkdcd foodir您的交互式外壳

所以严格意义上来说,如果没有包含一些(或至少一个)的shell 函数,你想要实现的目标是不可能的......换句话说,练习的目的是让你理解为什么函数(或别名)在一个壳....&&;

PS它应该是一个函数,而不是一个脚本(如果它是一个脚本,cd只会影响运行脚本的[sub-] shell,而不是交互式父shell);不可能创建单个命令或可执行文件(不是 shell 函数)来更改调用交互式父 shell 的目录(因为每个进程都有自己的当前目录,您只能更改自己进程的当前目录,不属于调用 shell 进程)。

聚苯乙烯。在 Posix shell 中,您应该删除function关键字,并将第一行设为mkdcd() {

于 2013-01-03T10:08:39.167 回答
19

对于oh-my-zsh用户:take 'directory_name'
参考:官方 oh-my-zsh github wiki

于 2015-07-12T15:38:44.603 回答
10

将以下内容放入您的 .bash_profile (或等效项)中将为您提供一个可以满足mkcd您需要的命令:

# mkdir, cd into it
mkcd () {
    mkdir -p "$*"
    cd "$*"
}

这篇文章更详细地解释了它

于 2014-10-24T10:13:49.843 回答
6

我认为这是不可能的,但对于所有想知道不需要您创建自己的脚本的最简单方法(据我所知)的人来说:

mkdir /myNewDir/
cd !$

这样你就不需要写两次新目录的名字了。

!$检索最后$一个命令 ( !) 的最后一个 ( ) 参数。

(还有更多有用的快捷方式,如!!!*!startOfACommandInHistory。在网上搜索以获取更多信息)

遗憾的是mkdir /myNewDir/ && cd !$不起作用:它检索上一个命令的最后一个参数,而不是命令的最后一个mkdir

于 2013-09-09T10:59:41.340 回答
2

也许我没有完全理解这个问题,但是

>mkdir temp ; cd temp

创建临时目录,然后更改为该目录。

于 2014-12-08T20:38:22.317 回答
2
mkdir temp ; cd temp ; mv ../temp ../myname

你可以这样别名:

alias mkcd 'mkdir temp ; cd temp ; mv ../temp ../'
于 2018-11-26T08:22:42.413 回答
2

您没有说是否要自己命名目录。

cd `mktemp -d`

将创建一个临时目录并更改为它。

于 2019-08-27T15:07:43.137 回答
-3

也许你可以使用一些 shell 脚本。

shell 脚本中的第一行将创建目录,第二行将更改为创建的目录。

于 2013-01-03T10:09:52.270 回答