[英]run command inside of ${ curly braces
我想给cd
加上别名,以便将我带到当前git项目的根目录,如果找不到该别名,它将带我到我的普通主目录。
我试图将HOME
设置为git root,或者,如果找不到它,则设置为我的普通home变量。
alias cd='HOME="${$(git rev-parse --show-toplevel):-~}" cd'
虽然不行。
您不能在${}
内运行命令,除非在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
实现,而不是递归。 当然,可以在参数扩展内执行命令。
好吧,仅在故障方面,即:
$ 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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.