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)
我知道我很可能没有正确的选项,请纠正我,但任何帮助都会很棒!
使用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
)来使用自定义名称立即找到它,而自定义选项则不是这种情况。有覆盖标准命令的用例,但这不是一个。
归档时间: |
|
查看次数: |
323 次 |
最近记录: |