如何在一行命令中创建并切换到新目录?

10

我已经使用Linux控制台有一段时间了。有一件事情让我很烦恼,就是每次我用mkdir命令创建一个新目录后,我都必须使用cd命令切换到该目录。请问是否有一种单个命令的解决方案,可以创建并切换到刚创建的目录中?

目前我做的是:

mkdir php5
cd php5

我可以做什么:

mkdir -someswitch php5

我想要简单而清晰的内容。一个好的例子是git branch somebranch,它可以创建新分支,git checkout -b somebranch则可以创建并切换到新分支。


有趣,但我怀疑是否存在。我在“man mkdir”或“mkdir --help”中没有看到任何内容。 - Rup
你可以编写一个简单的Shell脚本来完成这个任务。 - NPE
7个回答

8

发现了一些魔法:

mkdir foo && cd $_

this should be on top - chloesoe

8

实现这个目的的便携方式是使用一个shell函数,而不是bash函数(使用bashims,如function)。将此放置在相关的.profile中以进行交互式使用:

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

这将为mkdir添加-c选项,用于交互式使用。没有-c选项时,实用程序的行为与往常一样。请注意引用"$2",以便与名称中带有空格的目录一起使用。


但是它不会无限递归调用自身吗? - rodrigo
@rodrigo 不是的,这是因为 command 是 POSIX 表示“我想要执行该名称的简单命令”的方式。这将跳过任何同名的别名或函数,如果有定义的话。另请参阅 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/command.html。 - Jens
“shell function” 和 “bash function” 之间有什么区别? - William Pursell
@WilliamPursell:一个 bash 函数使用了 bashisms,比如另一个回答中使用的 function 关键字,而一个 shell 函数则不会。 - Jens

3

您可以自己创建别名或小脚本,没有任何限制。

mkdir $1 && cd $1

1
嗯,一个小脚本并不像看起来那么简单。退出脚本后,PWD将被恢复。 - choroba
1
mkdir -p 更好。 - codeforester

3

或者您可以使用分号';'来分隔命令,例如:

mkdir php5.3; cd php5.3


这样就可以在一个命令行中依次执行多条命令。

6
如果创建目录失败,这将会给你两个错误。 - Lars Kotthoff

0

这是我一直在使用的,不确定它是否符合最佳实践,但它可以工作。

function mk() {
    $file = $args[0]
    mkdir $file | cd
}


-1
你可以在Bash中定义一个函数来完成这个操作:
function mkcd() {
    mkdir $1 && eval cd $1
}

它防止在传递给cd之前扩展参数。这将使其能够处理包含奇怪字符的目录名称。 - Lars Kotthoff
1
但是 $1 在执行 eval 之前会被展开,这不可能做你认为的事情。 - Jens
3
抱歉,我不明白。在我看来,你应该使用引号:mkdir "$1" && cd "$1"。如果有什么问题,使用 eval 命令会使得无法进入文件名中包含 $ 符号的目录。 - rodrigo

-1
一个可以帮助的近似答案。这很容易输入。
 mkdir php7 && cd !$ 

我不知道为什么这在我的shell上不起作用。虽然我有一个bash shell。 - ezzeddin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接