Shell commands

What are the differences

Posted by Eirik on 29 Feb, 2024

set -euo pipefail

在Shell script中,set -euo pipefail 是設置script的選項,它們影響script的行為。逐個解釋這些選項:

  1. -e 這個選項使得script在任何命令出錯時立即退出。如果在腳本中的任何命令返回非零的退出狀態碼(即失敗),腳本將立即停止執行,並且返回非零的退出狀態碼。這有助於在腳本中快速發現錯誤,並且使得腳本更加健壯。

  2. -u 這個選項使得在腳本中使用未定義的變量時,立即退出腳本,並報告錯誤。如果腳本嘗試使用一個未賦值的變量,會被視為一個錯誤,並終止腳本的執行。這可以防止因為拼寫錯誤或者其他原因導致使用了未初始化的變量而產生的bug。

  3. -o pipefail 這個選項指示shell在管道命令中任何一個命令失敗時,設置整個管道命令的退出狀態碼為失敗。默認情況下,管道命令的退出狀態碼是最後一個命令的退出狀態碼,這個選項修改了這個行為,使得管道命令的退出狀態碼對於整個管道來說更加準確。這樣做有助於更好地處理管道中的錯誤情況。

綜合起來,set -euo pipefail 這一設置可以使得Shell script更加robust,更容易發現和處理錯誤,以及更可靠地處理管道命令的失敗情況。


Data flow

在Linux中,有一些用於將標準輸出和標準錯誤流重新定向的符號。這些符號包括 >、»、>& 和 »&。

>這個符號用於將標準輸出(stdout)重定向到指定的文件或文件描述符。如果目標文件不存在,則會創建一個新文件;如果存在,則會被覆蓋。 (與 1> 相同)

>>這個符號用於將標準輸出(stdout)附加到指定的文件或文件描述符末尾。如果目標文件不存在,則會創建一個新文件;如果存在,則會將輸出附加到現有文件的末尾。

>&這個符號用於將標準錯誤(stderr)重定向到與標準輸出相同的地方,也就是將錯誤輸出合併到標準輸出流中。(與2>&1以及&>相同)

>>&這個符號用於將標準輸出和標準錯誤都重定向到指定的文件或文件描述符。這相當於使用 > 或 » 將標準輸出和標準錯誤重定向到同一文件中。

其他一些資料流向符號還包括:

  • <用於將文件的內容作為輸入重定向到命令中。
  • |管道符號,用於將一個命令的輸出作為另一個命令的輸入。
  • &>將標準輸出和標準錯誤重定向到指定的文件中。
  • <&將文件或文件描述符的內容作為輸入重定向到命令中。
  • <<用於提供多行輸入,通常與 EOF 一起使用。

Example:

cat << EOF
I am "Finding" difficult to write this to file
I can "write" without double quotes
EOF

I am "Finding" difficult to write this to file
I can "write" without double quotes

這些符號在Linux和Unix系統中廣泛使用,用於管理命令的輸入、輸出和錯誤流。


LM_LICENSE_FILE

LM 在 LM_LICENSE_FILE 中代表 “License Manager”。LM_LICENSE_FILE 是一個通用的環境變量名,被許多software供應商所采用,用於指定license file的位置,以便process在啟動時能夠讀取license並驗證用戶的license是否有效或過期。

這個環境變量通常用於指定需要software license 的產品。當你運行需要license的software時,程序會查找這個環境變量,以確定license文件的位置。

通常情況下,LM_LICENSE_FILE 環境變量的值是指向license文件的路徑。license文件通常是一個文本文件,其中包含了softwarelicense的詳細信息,比如license類型、有效期等。software在啟動時會讀取這個文件,並根據其中的信息來驗證用戶的license是否有效。