開發者質疑新命令列工具 "Shef" 的基於 YAML 的方法

BigGo Editorial Team
開發者質疑新命令列工具 "Shef" 的基於 YAML 的方法

一款名為 Shef 的新命令列工具引發了開發者關於基於 YAML 的 shell 指令碼方法優缺點的爭論。該工具自稱是一個強大的用於製作 shell 配方的命令列工具,結合了 Make、GitHub Actions 和 CyberChef 的元素,為 shell 命令建立了一個基於 YAML 的介面。

開發者對 YAML 的疲勞感

社群對 Shef 的反應凸顯了有經驗的開發者對 YAML DSL 日益增長的疲勞感。許多評論者對將 shell 命令包裝在另一個基於 YAML 的領域特定語言中的價值表示懷疑。與之前類似方法的嘗試的比較立即出現,一位開發者將其與 Maven 1 和 Apache Jelly 進行了類比,描述了這種基於 XML 的指令碼最終如何被放棄。

「我看不出用 YAML 編寫配方而不是使用 shell 函式(或多平臺的 Python)的用例...它很快就會變成一種偽程式語言,卻沒有更好的組合語法帶來的好處。」

這種觀點在多個評論中得到了呼應,尤其是那些經常使用 Kubernetes 和其他大量使用 YAML 的工具的開發者,他們特別抵制在工作流程中新增另一層 YAML。

原始 Shell 指令碼與結構化方法的對比

討論的一個核心主題是 Shef 是否提供了足夠的優勢來證明其存在的合理性。雖然該工具的建立者辯稱其互動式使用者提示和額外功能是超越基本 bash 指令碼的優勢,但許多開發者堅持認為,只需稍加努力,shell 指令碼其實並不那麼晦澀難懂。

幾位評論者建議,當 shell 指令碼變得過於複雜時,更好的方法是切換到像 Python 這樣的完整程式語言,而不是引入新的抽象層。其他人則指出了像 Taskfile 這樣提供類似功能的現有工具,但開發者往往最終還是會迴歸到原始 shell 命令。

Shef 的主要特點

  • 互動式使用者提示
  • 命令管道連線
  • 複雜的控制結構和迴圈
  • 具有條件邏輯的可重用工作流
  • 基於 YAML 的配方格式

社群關注的問題

  • YAML 作為偽程式語言的使用
  • 與原始 shell 指令碼相比的複雜性
  • 安裝要求(最初需要 Go 工具)
  • 與之前被放棄的方法相似的模式(例如 Apache Jelly)

安裝障礙和實際考慮因素

Shef 的初始版本因其安裝過程而受到批評,該過程要求使用者安裝 Go 工具來嘗試該軟體。開發者承認了這一限制,並迅速更新了專案,在釋出中包含了二進位制資產,展示了對社群反饋的響應能力。

一些使用者欣賞該工具的某些方面,如其巧妙的名稱(chef 和 shell 的雙關語)以及在其他配方中重用配方的潛力。一位評論者建議在 README 中新增 asciinema 錄影,以更好地展示該工具的功能,開發者迅速採納了這一建議。

替代方法

圍繞 Shef 的討論促使幾位開發者分享了他們自己解決類似問題的替代方法。一些人描述了受 Ansible 啟發但為小規模操作設計的基於 Python 的工具。其他人則提到了類似 CDK 的強型別方法相對於 Go 和 YAML 組合的優勢。

這些替代方案突顯了關於如何最好地處理複雜 shell 操作的多樣化觀點,許多開發者更傾向於利用現有的程式語言,而不是建立新的領域特定語言。

雖然 Shef 代表了一種使 shell 指令碼更易於訪問和互動的有趣方法,但開發者社群的反應表明,對基於 YAML 的指令碼解決方案的興趣可能正在減弱,轉而支援更傳統的程式設計方法。儘管如此,該工具的建立者對該專案保持熱情並對反饋做出響應,這表明 Shef 可能會根據社群意見繼續發展。

參考:Shef: A Powerful CLI Tool for Cooking Up Shell Recipes