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

Joe*_*man 3 bash cd-command function mkdir

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

终端将是这样的:

User:/$ mkdir -g foo
User:/foo/$ 
Run Code Online (Sandbox Code Playgroud)

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

是否有一个单线允许我创建一个目录并同时进入它?

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

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

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

所以不是我不想要这个:

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

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

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

Gil*_*il' 6

使用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
}
Run Code Online (Sandbox Code Playgroud)

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