簡體   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