一个用于创建和更改目录的命令

Aut*_*om3 36 linux directory command cd mkdir

我只搜索一个命令 - 没有&&或者|- 创建一个目录,然后立即将当前目录更改为新创建的目录.(这是有人为他的"linux-usage"考试得到的一个问题,他做了一个新的命令就是这样做了,但这并不能给他带点数.)如果重要的话,这是在debian服务器上.

Mar*_*lea 52

我相信你在寻找这个:

mkdir project1 && cd "$_"
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,恕我直言.我查了一下,$ _是"特殊变量设置为执行上一个命令的最后一个参数",来源:http://www.tldp.org/LDP/abs/html/internalvariables.html (6认同)
  • @BartvanKuik,...说,ABS并不是一个特别好的参考指向人 - 它是b3的W3Schools,经常在其示例中使用不良做法,很少刷新过时的内容.请考虑http://wiki.bash-hackers.org/syntax/shellvars,或https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html上的官方手册,或BashGuide在http://mywiki.wooledge.org/BashGuide/Parameters#Special_Parameters_and_Variables (3认同)

Bas*_*tch 28

定义一个bash 功能,在您为此$HOME/.bashrc例如

 function mkdcd () {
     mkdir "$1" && cd "$1"
 }
Run Code Online (Sandbox Code Playgroud)

然后输入mkdcd foodir您的交互式shell

如此严格的感觉,如果没有包含一些(或至少一个)的shell函数,你想要达到的目标是不可能的......换句话说,练习的目的是让你理解为什么函数(或别名)在一个函数中是有用的.贝壳....&&;

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

PPS.在Posix shell中,您应该删除function关键字,并且第一行是mkdcd() {

  • 它不可能像你梦想的那样完成。`chdir` 系统调用(`cd` bash 内置)应该在交互式 shell 中运行(而不是在该 shell 的子进程中) (2认同)

Avi*_*pta 13

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

  • 哇,感谢这个超级技巧!我使用 zsh 多年但从未听说过 (2认同)

col*_*ude 9

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

# mkdir, cd into it
mkcd () {
    mkdir -p "$*"
    cd "$*"
}
Run Code Online (Sandbox Code Playgroud)

本文将更详细地解释它


Jer*_*meJ 5

我认为这是不可能的,但是让所有人都想知道(我知道)最简单的方法是什么:不需要我创建自己的脚本,这是:

mkdir /myNewDir/
cd !$
Run Code Online (Sandbox Code Playgroud)

这样,您无需两次写入新目录的名称。

!$检索上$一个命令(!)的last()参数。

(有这样的更加有用的快捷键,比如!!!*或者!startOfACommandInHistory。搜索在网上获取更多信息)

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