是否有快捷方式指向mkdir foo并立即将其插入cd?


89

这是我经常做的事

$ mkdir foo
$ cd foo

这可以作为单个命令使用,但是它的击键次数更多,并且不节省任何时间。

$ mkdir foo && cd foo

这有捷径吗?

编辑

使用下面的帮助,这似乎是最优雅的答案。

# ~/.bashrc
function mkcd {
  if [ ! -n "$1" ]; then
    echo "Enter a directory name"
  elif [ -d $1 ]; then
    echo "\`$1' already exists"
  else
    mkdir $1 && cd $1
  fi
}

1
您可以重命名功能mkdir,如果您使用command mkdir $1的,而不是仅仅mkdir $1在函数体。
安迪2010年

2
(1)为什么不简单地用“ mkdir $ 1; cd $ 1”代替“ &&”?这样,即使“ mkdir”失败,“ cd”也将成功,并且您不需要“已经完成”的脚手架。(2)按照书面规定,您的函数将无法工作(提示您输入目录名称)。您需要将它放在与存在测试分开的“ if”子句中(当前在“ elif”中)。
quack quixote

Answers:


45

我不是Linux / bash专家,但是请尝试将它放在您的中.bashrc

function mkdir
{
  command mkdir $1 && cd $1
}

PS感谢Dennis使用command mkdir


2
而是`which mkdir`使用command mkdir
丹尼斯·威廉姆森

1
谢谢丹尼斯。没有东西man command-您能引导我参考吗?(我可以弄清楚它的作用,但是要彻底检查是值得的;)
Andy 2010年

2
command的手册中进行了bash描述(该手册是内置的;不是独立的命令)。您也可以尝试help command
grawity 2010年

这也适用于zsh btw
Florian Loch

93

bashzsh

如果您不想记住其他功能并且不介意bashisms:

$ mkdir /home/foo/doc/bar && cd $_

$_(美元下划线)bash命令变量包含了最新的参数。因此,如果用户要在命令行中输入以下内容:echo foo bar && echo $_ baz,则输出将如下所示:

foo bar
bar baz

fish壳牌

在鱼壳中,输入以下内容:

> mkdir / home / foo / doc / bar
> CD alt + ↑

Alt键与向上或向下箭头键组合将在命令参数历史记录中循环显示。


4
这也适用zsh
Nabil Kadimi 2014年

3
您能解释一下$ _是什么吗?新手在这里。
arg20 2014年

@NabilKadimi您是说<kbd> Alt <kbd> + <kbd>⬆<kbd>在Zsh中工作良好吗?实际上,在zsh 5.4.2和on-my-zsh上,Alt +⬆给我字符'A'。
周末

为$ _ +1-愚蠢的性感佛兰德斯!
cig0


10

关于什么:

$ mkdir newdirname; cd $_

比起使用&&组合魁北克吉x德和kzh的答案要容易一些。


26
关键&&是,cd如果mkdir命令失败,将不会执行
slhck 2012年

1
实际上,@ slhck就是这个问题的症结所在:cd,即使mkdir失败了(例如,如果它已经存在,则迫使用户向该路径实际写入cd的第二条命令)。但是,与该答案所说的相反,这并不是为了简单:&&并不比;更复杂。
moala

7

您可以尝试如下操作:

#!/bin/sh
mkdir $1 && cd $1

将此脚本保存到路径中的某个位置,例如/ usr / local / bin或〜/ bin(您必须将最后一个脚本放入〜/ .profile文件中的路径中)。然后,您可以简单地调用它。


4
这怎么工作?它似乎只cd~/bin/mkcd脚本执行的上下文中,而不是脚本的调用者。
Erik Allik 2013年

5
$echo 'mkcd() { mkdir -p "$@" && cd "$_"; }' >> ~/.bashrc
$mkcd < pathtofolder/foldername >

2

这是我放入~/.config/fish/config.fish文件中的一个简单函数,可以完成此任务:

function mkcd
    mkdir -pv $argv;
    cd $argv;
end

-pv标记允许创建带有子目录的目录。


0

如果目录已经存在,则取决于期望的结果。

如果目录已经存在则失败

mkcd() {
    mkdir $1 && cd $1
}

无论更改目录

mkcd() {
    mkdir $1 ; cd $1
}

用法 mkcd some / path / to / my / dir


0

我发现下面的函数只能创建一个目录,如果我想同时创建子目录,则无法使用:

function mkdir
{
  command mkdir $1 && cd $1
}

因此,我对其进行了更改,现在它的效果很好!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.