我创建了很多目录,我想让我的生活变得懒惰,并自动cd
进入我创建的目录,结果-g
是mkdir -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
) 来立即使用自定义名称找到它,而自定义选项则不然。有一些用例可以覆盖标准命令,但这不是一个。