【问题标题】:One command to create and change directory创建和更改目录的一个命令
【发布时间】:2012-12-17 16:20:46
【问题描述】:

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

【问题讨论】:

  • 我很确定考试题是为了让您了解为什么需要 bash 函数...。编写脚本不起作用(而且是一个错误的答案)。
  • 这对于stackoverflow来说不是一个好问题,就像@BasileStarynkevitch说他没有得到分数是因为他使用了脚本而不是函数,或者他犯了其他语法错误,或者这是一个错误带有标记/问题本身。你会发现的唯一方法是与考试标记/设置者交谈。
  • 为这两个命令构建一个脚本。
  • @user1929959:它不能是脚本。看我的回答(应该是函数

标签: linux directory command mkdir cd


【解决方案1】:

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

cd `mktemp -d`

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

【讨论】:

  • 有没有办法重命名当前目录? Prolly.. 因为如果是这样,我们也许可以把它锁起来。 :D
【解决方案2】:

我相信您正在寻找这个:

mkdir project1 && cd "$_"

【讨论】:

【解决方案3】:
mkdir temp ; cd temp ; mv ../temp ../myname

你可以这样别名:

alias mkcd 'mkdir temp ; cd temp ; mv ../temp ../'

【讨论】:

    【解决方案4】:

    oh-my-zsh 用户:take 'directory_name'
    参考:Official oh-my-zsh github wiki

    【讨论】:

    • 哇,感谢这个超级技巧!我使用 zsh 多年,但从未听说过
    【解决方案5】:

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

    >mkdir temp ; cd temp
    

    创建临时目录,然后切换到该目录。

    【讨论】:

      【解决方案6】:

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

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

      This article 更详细地解释它

      【讨论】:

      • "$*" 通常是错误的——它将所有参数放在一起并将它们与$IFS 的第一个字符一起作为分隔符。这意味着虽然mkdir "Directory One" "Directory Two" 将创建两个目录,但mkcd "Directory One" "Directory Two" 将尝试创建一个名为Directory One Directory Two 的目录。
      • 试试“$@”而不是“$*”,我听说单独引用每个参数会产生奇迹,如果你没有参数,它会默默地省略“”...跨度>
      【解决方案7】:

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

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

      然后在交互式 shell 中输入 mkdcd foodir

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

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

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

      【讨论】:

      • 首先 -- $1 应该是 "$1"。其次——我认为这算是“制定新命令”。
      • 不,这不是我正在寻找的(正如 ruakh 所说),它正在制作一个新的命令/函数/脚本或类似的东西
      • 不可能如你所愿。 chdir 系统调用(cd bash 内置)应该在交互式 shell 中运行(而不是在该 shell 的子进程中)
      • @BasileStarynkevitch:您发布的答案不符合 OP 的要求。如果您的真正答案是“不可能满足这些要求”,那么您需要在您发布的答案中包含这一点。
      • 顺便说一句,如果你打算保留function关键字,你应该删除()——这样你的代码就与ksh兼容(与代码兼容)用 ksh 扩展编写的是 为什么 bash 有一个 function 关键字)。现在,它与两者都不兼容。另见wiki.bash-hackers.org/scripting/obsolete
      【解决方案8】:

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

      mkdir /myNewDir/
      cd !$
      

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

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

      (还有更多有用的快捷键,如!!!*!startOfACommandInHistory。更多信息请在网上搜索)

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

      【讨论】:

      • "mkdir coffeescript && cd !$" 为我工作,谢谢!
      【解决方案9】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 2017-09-23
        • 2023-03-02
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        相关资源
        最近更新 更多