我想使用别名HOME
,这样就可以将我带到当前git项目的根目录,如果找不到它,就会把我带到正常的家庭目录。
我正在尝试将alias cd='HOME="${$(git rev-parse --show-toplevel):-~}" cd'
设置为git root,或者如果找不到,则将其设置为正常的home变量。
{{1}}
虽然不起作用。
答案 0 :(得分:3)
你不能在${}
内运行一个命令,除了在没有设置值的fallback子句中(在POSIX sh或bash中;在zsh中可能是可行的,这允许所有类型的古怪球)语法)。
无论如何,如果使用函数,则需要更少的扭曲:
# yes, you can call this cd, if you *really* want to.
cdr() {
if (( $# )); then
command cd "$@"
else
local home
home=$(git rev-parse --show-toplevel 2>/dev/null) || home=$HOME
command cd "$home"
fi
}
注意:
command cd
用于调用真正的cd
实现而不是递归。答案 1 :(得分:2)
当然,可以在参数扩展中执行命令 好吧,只有在失败方面,那就是:
$ unset var
$ echo ${var:-"$(echo "hello world!")"}
因此,如果您使用失败方面,您可能会执行git命令。 假设var为空:
unset var
var=${var:-"$(git rev-parse --show-toplevel 2>/dev/null)"}"
但这会更简单:
var="$(git rev-parse --show-toplevel 2>/dev/null)"
并且,如果此后var仍为空,请使用:
HOME=${var:-~} builtin cd
产量:
var="$(git rev-parse --show-toplevel 2>/dev/null)"; HOME=${var:-~} builtin cd
可以在别名中使用:
alias cdr='var="$(git …)"; HOME=${var:-~} builtin cd'