繁体   English   中英

在$ {花括号内运行命令

[英]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
}

注意:

  • 使用函数可以测试参数列表,使用分支逻辑,具有局部变量&c。
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM