Bash

Bash (Git) - 函式、別名和 SH 腳本文件

  • December 9, 2015

我對別名的使用非常多產,尤其是所有不同的 git 命令及其順序和相互依賴關係等。所以,我創建了一些執行更複雜腳本的別名。

alias stash='f() { .... }; f'

總之非常直接。然而,作為我的開發風格中最純粹的一點,我喜歡“格式良好”的程式碼。形式有時與功能一樣重要。因此,使用一個簡單的別名:

alias gca='git commit --amend '

我沒有問題直接在.bash_aliases文件中列出它們。但是對於一些多命令別名,我有點希望它們是分開的。

打字help我看到

function name { COMMANDS ; } or name () { COMMANDS ; }

但我目前理解使用的唯一方法function是以別名的名義。但是考慮到git diff --name-status我評論的文章的顏色,我可以將腳本合併到 SH 文件中,例如,我通過 xargs 將數據傳遞給它。

但是是否有可能(可能)通過腳本創建“函式”,而不是將它們列為“別名”,而是將它們列為儲存在 sh 文件中的實際函式?

假想:

alias stash='f() { if [[ -z $1 ]]; then git stash list; else git stash $1; fi; }; f'

相反,stash.sh文件將具有:

function stash
{
 if [[ -z $1 ]]; then
    stash list;
 else git stash $1;
 fi;
}

這樣的事情是否可能,所以在這兩種情況下,我都會在提示符下簡單地鍵入“stash”,但它們的定義方式卻大不相同?

您可以在您的環境中獲取所需功能的列表。

創建一個文件~/.bash_functions並從~./bashrc.

與來源相同的方式./bash_aliases

if [ -f ~/.bash_functions ]; then
   . ~/.bash_functions
fi

然後,定義盡可能多(和復雜)的函式。

您可以為函式定義別名(在 ~/.bash_aliases 內以保持秩序)。但這並不是真正需要的,因為您可以直接呼叫源函式。通過定義:

stash() {
   if [[ -z $1 ]]; then
       stash list;
   else
       git stash $1;
   fi;
}

stash您可以簡單地通過or來呼叫它stash this,不需要別名。

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