跳到正文
本頁目錄

lip self-update

把 lip 自身更新到最新發佈的版本。

概要

text
lip self-update [--check] [-h | --help]

說明

lip self-update 找出 lip 的最新發佈;如果它比正在執行的 lip 新,就按 lip 當初的安裝方式安裝它。

檢查

lip 從 GitHub API 讀取 lip 的發佈,地址是 https://api.github.com/repos/LiteLDev/lip/releases?per_page=100。草稿,以及標籤不是 v 加 SemVer 版本的發佈,會被忽略。

最新發佈是版本最高的那個。像 1.1.0-beta.1 這樣的預發行版本,只有在正在執行的 lip 本身也是預發行版本時才計入。

沒有任何發佈,或者最新發佈並不比正在執行的 lip 新時,lip 寫明它已是最新,並且不做任何變更。帶 --check 時,無論哪種情況,lip 都到此為止。

安裝類型

類型含義lip 如何得知
msilip 是由 Windows 安裝程式 lip-<version>-<platform>.msi 安裝的。lip 可執行檔旁邊的 install.json 檔案內容為 {"kind": "msi"}。它由安裝程式寫入。
portablelip 是從歸檔中解壓縮出來的,或以其他任何方式安裝的。沒有 install.json。

如果 install.json 存在,卻不是 kind 為 "msi" 的 JSON 物件,lip self-update 失敗。

<platform> 是 lip 執行所在的系統:win-、linux- 或 osx-,後接 x64 或 arm64。在其他系統上,lip self-update 在做出任何變更之前失敗。

更新

不帶 --check 且存在更新的發佈 V 時,lip 依次:

  1. 讀取安裝類型。

  2. 選定發佈中要安裝的檔案。發佈中沒有這個檔案,或者沒有 SHA256SUMS 檔案時,命令失敗。在 Windows 以外的系統上,類型 msi 也會失敗。

    類型檔案
    msilip-V-<platform>.msi
    Linux 上的 portablelip-V-<platform>.tar.xz
    Windows 和 macOS 上的 portablelip-V-<platform>.zip
  3. 清空並建立快取目錄中的 self-update 目錄。

  4. 下載 SHA256SUMS,即該發佈的校驗和。

  5. 把檔案下載到 self-update 中。如果 SHA256SUMS 中沒有這個檔案的行,或者下載內容的 SHA-256 不一致,lip 刪除下載的檔案並失敗。

  6. 按安裝類型安裝該檔案;見下文。

第 1 到 5 步中的失敗不會變更安裝目錄中的任何檔案。

msi。 lip 以系統管理員身份啟動 msiexec /i <file> /qn /norestart;Windows 會請你允許。你拒絕,或者 msiexec 沒能啟動時,命令失敗。否則 lip 寫明安裝程式正在執行,並立即以結束代碼 0 結束,不等待它結束。安裝程式在背景靜默地取代 lip,不會重新啟動 Windows。請關閉其他正在執行的 lip 處理程序,讓它能夠完成。

portable。 lip 把歸檔解壓縮到 self-update 中,然後逐個取代 lip 所在目錄中的檔案:每個已有的檔案先改名為 <file>.old,再在原位置寫入新檔案。任何一步失敗時,lip 把所有改過名的檔案恢復原樣,然後失敗。所有檔案都寫好之後,lip 刪除能刪除的 .old 檔案和 self-update 目錄。

  • 目錄中不在歸檔裡的檔案會保留。
  • 在 Windows 上,正在執行的 lip.exe 無法刪除,所以 lip.exe.old 會留下。下一次啟動的 lip 會刪除它。
  • 在 Linux 上,解壓縮 .tar.xz 歸檔需要系統中有 tar 和 xz。

更新之後

如果這次更新取代了 lip 或啟動了安裝程式,執行它的常駐程式會在空閒後結束,這樣下一條命令就會啟動新版本。它還在執行託管伺服器時會繼續執行;參見更新之後。

網路

發佈清單和 SHA256SUMS 始終直接從 GitHub 讀取,這樣代理伺服器無法改變 lip 安裝的內容。只有更新檔案本身通過 github_proxy 下載。

選項

選項說明
--check只查找最新發佈。不安裝任何東西,也不做任何變更。
-h、--help輸出幫助並結束。

輸出

只有 lip self-update --check 有結果。存在更新的發佈時,標準輸出收到它的版本和一個換行:

text
1.1.0

lip 已是最新時,標準輸出什麼都收不到。其餘的都是寫到標準錯誤的消息。

所以指令碼要靠輸出是否為空來區分這兩種情況,而不是靠結束代碼。

結束狀態

結束代碼含義
0lip 已是最新;或 --check 已完成(無論是否存在更新的發佈);或更新已安裝;或安裝程式已啟動。
非 0用法錯誤,或檢查或更新失敗。

示例

檢查是否有新版本:

shell
lip self-update --check

更新 lip:

shell
lip self-update

在 POSIX shell 指令碼中,只在有新版本時更新:

shell
if [ -n "$(lip self-update --check 2> /dev/null)" ]; then
  lip self-update
fi

另請參閱

  • 安裝:安裝、更新和解除安裝 lip。
  • 設定:介面中的檢查更新。
  • 檔案:install.json 和 .old 檔案。