Bash

Bash Alias 中的 if-then-else

  • December 3, 2021

我正在嘗試為它創建一個別名,mv以便它在普通文件夾中執行正常行為,並被git mv內部 git 儲存庫替換。我嘗試了很多方法。該if語句有效,只有命令git mv將無法正確執行。

alias mv='"$(
if [ x`git rev-parse --show-toplevel 2> /dev/null` = x ]; 
   echo mv;  
else 
   echo "git mv"; 
fi)"'

我會為此使用一個函式,如下所示:

gitmv()
{
   # If in a git repo - call git mv. otherwise- call mv
   if [ x`git rev-parse --show-toplevel 2> /dev/null` = x ]; 
   then
       mv "$@"  
   else 
       git mv "$@" 
   fi
}

編輯:

alias mv=gitmv

儘管 jhscheer 提出了一個更好的解決方案(恕我直言),但仍然可以僅使用別名來實現您想要做的事情。

您的別名不起作用,因為外部雙引號會git mv產生單個標記,並且您沒有git mv執行檔。如果您刪除外部雙引號,您的別名應該可以正常工作。

順便說一句,內部雙引號 inecho "git mv"是無用的,但無害。

我沒有可立即測試的 git 儲存庫,但我只是嘗試使用以下別名:

alias foo='$(if [ x"`pwd`" = x"$HOME" ] ; then echo echo; else echo echo foo; fi)'

引用自:https://unix.stackexchange.com/questions/351215