簡體   English   中英

獲取自定義 bash 腳本的可接受方式是什么?

[英]What is the acceptable way to source custom bash scripts?

我正在開始在我的 MBP 上自動化一些文檔功能的過程,並且想學習一些很好的方法來獲取自定義腳本以用於 bash。 我(在去年)拿起了一個 MBP 並一直在學習 package 管理以及 shell 調用是如何發生的。 我有一個來自 brew 的 bash 的 5.x 版本,最初使用 .bash_profile 啟動了我的 config.dot 文件。 我已經使用 function 構建了一個腳本,它將觸及新創建的工作目錄中的 readme.md,它可以幫助我在創建新目錄時自動創建關聯的自述文件 - 如下所示:

function mkr() {
    touch $1/readme.md
    if [ $? -eq 0 ]
    then
        echo "Successfully created file" # stdout
        # exit 0 # success but it kills the shell?
    else
        echo "Could not create file" >&2 # out to stderr
        # exit 1 # they killed kinney
    fi
}

######CLI to invoke the above script named .mk_readme.sh
$ mkdir ~/path/to/new/dir
$ mkr !!:1

我的擔憂是:

  1. 是否有更有效的方法來處理簡單的任務以加快上述工作流程?
  2. 在獲取文件時,最好只根據需要獲取單個腳本或自定義腳本的目錄。 我的猜測是解決方案取決於用例。 也許我們需要開發人員記錄他們的工作和所有需要的腳本,以便他們使用並從這個聚合目錄中獲取資源。 然后我們看看采購的應用端並分別聚合它們?
  3. 我正在使用source./.mk_readme.sh獲取當前在 .bash_profile 中的文件。 我閱讀了一篇通過 .bashrc 解決此問題的文章。 這樣做的后果是什么?最好的做法是將source.bashrc放入 .bash_profile 中以發生這種情況,或者直接從 ~ 中保留需要從 .bash_profile 進行采購的目錄。
  4. 誰能給我一個快速解決這里處理退出狀態的最佳方法的問題? 我正在使用 VSCode,它會在成功創建自述文件后殺死內部終端。 在我目前的思考過程中,如果調用 mkr::.1 時出現問題(也許我不小心調用了 !!:2),我可能想要警告文件創建不成功,但它不會破壞我當前正在運行的 shell里面。

我可能已經開始考慮答案,因為它可能在於 Mac 或 Posix/Unix/Linux 機器上的負載。 我是 Mac 新手,在雲和裸機機器上都涉足了 Ubuntu Debian 和 Fedora/RHEL/CentOS - 我只是想了解更多關於這台筆記本電腦的信息,它的成本比我現在的車還高:)謝謝你時間提前。

反饋,每個問題:

  1. 是否有更有效的方法來處理簡單的任務以加快上述工作流程?

腳本很簡單。 考慮在touch之前測試該文件是否已經存在,是否存在碰撞時間戳或執行其他一次性命令的副作用。 [ -f $1/readme.md ] && return

  1. 在獲取文件時,最好只獲取單個腳本...

這兩個選項都是合理的,bash 將以有效的方式處理這兩個選項。 設置將包含在“PATH”中的共享文件夾可以更輕松地進行更改、添加腳本等。我認為它更有效(從管理的角度來看),而不是在 bash 啟動期間采購單個文件。

  1. 我正在使用 source./.mk_readme.sh 獲取當前位於 .bash_profile 中的文件。

雖然向每個 bash 啟動添加單個 function 定義很小,但這通常不會很好地擴展。 從表面上看,這個 function 將被偶爾使用(每個文件夾一次)。 我建議添加對腳本的引用。 如果只需要交互式會話,您可以在 '~/.bashrc' 中使用別名。 很容易掉入滑坡,會出現額外的 3 個字母命令。

  1. 誰能給我一個快速熨燙的最佳方法來處理

不幸的是,我沒有從 VS 運行 bash 腳本的經驗。 以下是基於谷歌/堆棧溢出:

* Alternative, instead of running window 'pause', use 'read', to wait for standard input.
* Modify the launcher to pass env var "EXIT_PAUSE=1", add '[ "$PAUSE" ] || trap 'echo 'echo "exit $?" ; pause' EXIT' to the top your script

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM