2013-04-28 16 views
3

我一直在使用Linux控制台一段时间了。有一件令我感到不快的事情是,每次我使用mkdir创建一个新目录时,我必须cd才能更改为它。是否有单一的命令解决方案来创建并切换到刚创建的目录?如何mkdir和切换到一个新的目录

现在我做:

mkdir php5 
cd php5 

我可以这样做:

mkdir -someswitch php5 

我想要的东西简单,干净。一个很好的例子是git branch somebranch它使新的分支和git checkout -b somebranch它使并切换到新的分支。

+0

有趣,但我怀疑是否有。我在“man mkdir”或“mkdir --help”中看不到任何内容。 – Rup 2013-04-28 09:56:03

+0

你可以编写一个简单的shell脚本来做到这一点。 – NPE 2013-04-28 09:56:06

回答

5

可移植的方式是使用shell函数 - 而不是bash函数(使用类似function的bashims)。把这个相关.profile交互使用:

mkdir() { 
    case $1 in 
     (-c) command mkdir -p "$2" && cd "$2";; 
     (*) command mkdir "[email protected]";; 
    esac 
} 

这增加了-c选项mkdir交互使用。没有-c该实用程序就像以前一样行事。并注意引用"$2",因此它可以在名称中使用空格的目录中工作。

+0

但它不会调用自己递归_ad infinitum_? – rodrigo 2013-04-28 10:24:51

+0

@rodrigo不,由于'command',这是POSIX表达方式“我想执行该名称的简单命令”。如果需要定义,它将跳过任何名称相同的别名或函数。另见http://pubs.opengroup.org/onlinepubs/9699919799/utilities/command.html – Jens 2013-04-28 10:26:40

+0

我不知道那一个。谢谢! – rodrigo 2013-04-28 10:30:48

2

没有什么能够阻止你创建自己的别名或小脚本

mkdir $1 && cd $1 
+0

那么,一个小脚本并不像看起来那么容易。退出脚本后,PWD将被恢复。 – choroba 2013-04-28 09:59:57

0

您可以在bash定义一个函数来做到这一点:

function mkcd() { 
    mkdir $1 && eval cd $1 
} 
+0

这里的'eval'有什么意义? – rodrigo 2013-04-28 10:13:22

+0

它在传递给'cd'之前防止参数扩展。这将允许它使用包含奇怪字符的目录名称。 – 2013-04-28 10:19:03

+0

但是在执行eval之前'$ 1'被展开。这不可能做你认为它做的事。 – Jens 2013-04-28 10:20:22

2

或者你可以使用“;”分开命令,如:

mkdir php5.3; cd php5.3

+5

如果创建目录失败,这会给你两个错误。 – 2013-04-28 10:07:01

0

可以帮到你的密切答案。打字很简单。

 mkdir php7 && cd !$
相关问题