我正在寻找覆盖内置命令的方法,并找到了一种通过在~/.bashrc
文件中定义函数的方法。我想覆盖该cd
命令,以便当我切换到新目录时,它将执行以下操作:
- 如果可用,请为 python 激活虚拟环境。
- 如果可用,则打印出名为“.todo”的文件中的各个行。
- 可能的新选择...
我将仅将其用于开发,实际上我可以通过编写一个命令来完成这些任务,例如$ cat .todo
。
问题是:覆盖 cd 命令是否会导致我使用其他应用程序(在脚本中使用 cd 命令)时速度变慢,还是可以忽略不计*?
*当然,这会导致速度下降,因为它每次都会检查两个 if 条件,但这种下降可以忽略不计吗?
我使用的是笔记本电脑而不是嵌入式系统,因此我有足够的处理能力。
答案1
答案显而易见:尝试一下。做好准备,随时撤消更改。
我用:
在我最开始的地方~/.bash_aliases
(来源于~/.bashrc
):
declare -i is_interactive
case $- in
*i*) is_interactive=1 ;;
*) is_interactive=0;;
esac
然后,
if [[ $is_interactive -eq 1 ]] ; then
# from the "xttitle(1)" man page - put info in window title
update_title()
{
[[ $TERM = xterm ]] || [[ $TERM = xterm-color ]] && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}
cd()
{
[[ -z "$*" ]] && builtin cd $HOME
[[ -n "$*" ]] && builtin cd "$*"
update_title
}
在我的所有系统上,根据反射(5 台台式机,4 台笔记本电脑),有些比较旧,我从未注意到任何时间滞后。YMMV,取决于您在实际之前和之后做了多少工作cd
。