Bash

如何在命令執行時設置別名?

  • December 6, 2017

我希望其他開發人員有一些方便的方法。因此我想給他們一個腳本,它會自動設置一個別名。

例如,命令grunt compileModule:[modulename]應該將別名設置cprev為這個確切的命令。設置別名後該命令仍應執行!

由於我們通常在同一個模組上工作多天,別名也應該在~/.bashrc文件中獲得一個條目(這是主要的“功能”,所以每當他們關閉 bash 時,他們不需要在重新輸入時輸入整個命令)

現在有很多關於history以及如何查找最後執行的命令等的文章,但我無法找到如何“連接”所有資訊以產生我需要的資訊。

我正在考慮為grunt.

就像是

alias grunt='~/myScriptForAliasHistory.sh;grunt $1';

那合適嗎?

編輯

為了更清楚地說明這一點:

原來的命令是

grunt compileModule:[name]

修改後它應該像這樣工作。

它應該只做一個額外的步驟,所以你可以呼叫相同的函式

cprev

以及(使用相同的參數)

工作流程可能如下所示:

  1. 開發人員開始開發新模組。為了編譯它,他寫道grunt compileModule:[name]
  2. 同一個開發人員需要重新啟動他的 bash/pc/console。現在他不想再次編寫整個命令,而只想輸入cprev(然後執行grunt compileModule:[name]
  3. 第二天他開始處理模組[anothername],所以他執行grunt compileModule:[anothername]
  4. 如果他現在重新啟動,命令cprev將執行grunt compileModule:[anothername]

換句話說:無論何時被呼叫,它都應該用它自己的目前呼叫參數grunt compileModule覆蓋別名。cprev

使用歷史擴展 with!將在沒有別名或函式的情況下執行此操作:

$ grunt compileModule:[something]

$ # other things

$ !grunt

最後一個!grunt將導致 shell 在命令行歷史中查找以字元串開頭的最後一個命令grunt並執行它。

bash

!string

參考歷史列表中目前位置之前的最新命令,以string.

如果 shell 具有持久的歷史記錄(通常通過設置啟用HISTFILE),那麼這也將在連續的 shell 會話中工作,並且根據 shell,它甚至可以在並發會話中工作。

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