如何向 mkdir 命令添加自定义选项

如何向 mkdir 命令添加自定义选项

我创建了很多目录,我想让我的生活变得懒惰,并自动cd进入我创建的目录,结果-gmkdir -g foo

终端会是这样的:

User:/$ mkdir -g foo
User:/foo/$ 

我看过这个页面但没有成功。

是否有一个单行代码允许我创建一个目录并同时移入该目录?

我已经尝试.bash_profile使用此命令,但它只是完全覆盖该命令。 (后来意识到这是一个无限循环)

mkdir() {
 if "$1" -eq "-g"
  mkdir "$2"
  cd "$2"
 else
  ## do the regular code
 fi
}

另一件事是我不想创建更多别名,因为我最终会忘记我拥有的所有别名。

所以不是我不想要这个:

完全命令。 (后来意识到这是一个无限循环)

mkcd() {
 if "$1" -eq "-g"
  mkdir "$2"
  cd "$2"
 else
  ## do the regular code
 fi
}

我知道我很可能没有正确的选择,请纠正我,但任何帮助都会很棒!

答案1

使用command内置命令调用外部命令,绕过任何同名函数。还:

  • 接下来if是一个普通的命令。要执行字符串比较,请调用test内置函数,或[使用相同语法加 Final 的内置函数],或[[ … ]]具有更宽松语法的构造。看使用单括号或双括号 - bash了解更多信息。
  • -eq运算符用于比较整数。用于=比较字符串。
  • 我添加了一些对传递多个参数的有限支持(包括诸如 之类的选项-p)。下面我cd仅在mkdir成功时调用,并在传递给函数的最后一个参数上调用它。
  • -g只会被认为是第一个参数。解析选项以从其所在的任何位置定位和删除它是可能的,但更难。
mkdir () {
  local do_cd=
  if [ "$1" = "-g"]; then
    do_cd=1
    shift
  fi
  command mkdir "$@" &&
  if [ -n "$do_cd" ]; then
    eval "cd \"\${$#}\""
  fi
}

我不建议定义您的自定义选项。它们不会显示在--help手册页中。它们并不比定义具有不同名称的命令更容易记住:要么您不记得自己有它们,并且与具有不同名称的命令相比没有任何优势,要么您不记得它们是自定义的,然后您可以通过询问 shell 是否是内置命令或函数 ( type mkcd) 来立即使用自定义名称找到它,而自定义选项则不然。有一些用例可以覆盖标准命令,但这不是一个。

相关内容