./bin
中有$PATH
。serve()
个来源文件中定义了一个函数~/.bashrc
。/Users/deefour/some/project/bin/serve
当我cd
进入/Users/deefour/some/project
并运行
➜ serve
正在执行serve()
功能。有没有办法在不明确运行
bin/serve
脚本优先权
➜ ./bin/serve
或者一般来说,有没有办法通过$PATH
查找优先级通过相同名称的用户定义函数发出命令?
答案 0 :(得分:2)
如果你跑
command serve
...然后这将忽略任何名为serve
的函数,并且只从PATH执行外部命令。
或者,您可以编写函数以在存在的情况下通过外部命令:
serve() {
if type -P serve >/dev/null; then
command serve "$@"
else
# ...function contents here...
fi
}
作为另一种选择,您可以创建“回退”函数的命名空间,并从command_not_found_handle
钩子中调用它们:
command_not_found_handle() {
if type "fallback__$1" >/dev/null; then
"fallback__$@"
else
printf 'Command not found: %q\n' "$1" >&2
return 127
fi
}
fallback__serve() {
# your normal serve function
}
答案 1 :(得分:0)
尝试写
`which serve`
而不是
serve
甚至是类似的东西
run_executable() {
program="$1"
fullname=`which "$program"`
[ "$?" -eq 0 ] || return 127
"$fullname"
}
run_executable serve
答案 2 :(得分:-1)
我似乎记得使用\ command来覆盖别名。这也适用于覆盖功能。我现在不在电脑前测试它。