自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

六種方法打造出色的Shell腳本

開發(fā) 前端
本文通過實(shí)施這些技術(shù),目標(biāo)是創(chuàng)建一個(gè)用戶友好、信息豐富且健壯的shell腳本,為用戶提供運(yùn)行和分析基準(zhǔn)測(cè)試的極佳體驗(yàn)。

1. 詳盡的錯(cuò)誤處理和輸入驗(yàn)證

清晰的錯(cuò)誤信息對(duì)于良好的用戶體驗(yàn)至關(guān)重要。這就是為什么在腳本中實(shí)現(xiàn)了詳盡的錯(cuò)誤處理和輸入驗(yàn)證。例如:

if [ -z "$1" ] 
  then 
    echo "Usage: evaluate.sh <fork name> (<fork name 2> ...)" 
    echo " for each fork, there must be a 'calculate_average_<fork name>.sh' script and an optional 'prepare_<fork name>.sh'." 
    exit 1 
fi

這種方法可以幫助用戶快速識(shí)別和解決問題,從而節(jié)省時(shí)間并減少挫敗感。

2. 明了且色彩鮮明的輸出

為了讓腳本輸出更加清晰易讀,采用了ANSI顏色代碼來強(qiáng)調(diào)重要信息、警告和錯(cuò)誤。比如:

BOLD_RED='\033[1;31m'
RESET='\033[0m'
echo -e "${BOLD_RED}ERROR${RESET}: ./calculate_average_$fork.sh does not exist." >&2

這種視覺上的區(qū)別可以幫助用戶快速掌握每條消息的本質(zhì)。

3. 詳盡的進(jìn)度報(bào)告

希望用戶能夠確切地了解腳本在每個(gè)步驟中正在做什么。為此,實(shí)現(xiàn)了一個(gè)函數(shù),它在執(zhí)行每個(gè)命令之前先打印該命令:

function print_and_execute() {
  echo "+ $@" >&2 
  "$@" 
}

這與內(nèi)置的set -x跟蹤輸出格式相匹配,但為腳本編寫者提供了更細(xì)致的控制,以決定打印哪些內(nèi)容。

這種透明度不僅讓用戶保持知情,而且在出現(xiàn)問題時(shí)也有助于調(diào)試。

4. 策略性地使用 "set -e" 和 "set +e"

進(jìn)行錯(cuò)誤處理 希望確保如果腳本本身出現(xiàn)錯(cuò)誤,腳本會(huì)立即退出,但如果個(gè)別分支遇到問題,也允許它繼續(xù)運(yùn)行。為此,在腳本中策略性地使用了選項(xiàng) "set -e" 和 "set +e"。以下是如何實(shí)現(xiàn)這種技術(shù)的:

# 在腳本開始處
set -eo pipefail

# 在為每個(gè)分支運(yùn)行測(cè)試和基準(zhǔn)測(cè)試之前
for fork in "$@"; do
  set +e # 們不希望prepare.sh、test.sh或hyperfine在1個(gè)分支失敗時(shí)就退出腳本

  # 運(yùn)行準(zhǔn)備腳本(簡(jiǎn)化)
  print_and_execute source "./prepare_$fork.sh"

  # 運(yùn)行測(cè)試套件(簡(jiǎn)化)
  print_and_execute $TIMEOUT ./test.sh $fork

  # ...(其他特定于分支的操作)
done
set -e  # 在特定于分支的操作后重新啟用錯(cuò)誤退出

這種方法為腳本編寫者提供了細(xì)致的控制,以決定哪些錯(cuò)誤會(huì)導(dǎo)致腳本退出,哪些可以用其他方式處理。

5. 平臺(tái)特定的適配

知道用戶可能會(huì)在不同的操作系統(tǒng)上運(yùn)行此腳本,添加了邏輯來檢測(cè)操作系統(tǒng)并相應(yīng)地調(diào)整腳本的行為:

if [ "$(uname -s)" == "Linux" ]; then 
  TIMEOUT="timeout -v $RUN_TIME_LIMIT" 
else # 假設(shè) MacOS 
  if [ -x "$(command -v gtimeout)" ]; then 
    TIMEOUT="gtimeout -v $RUN_TIME_LIMIT"
  else 
    echo -e "${BOLD_YELLOW}WARNING${RESET} gtimeout not available, install with `brew install coreutils` or benchmark runs may take indefinitely long." 
  fi
fi

這確保了在不同環(huán)境中的一致體驗(yàn)。許多#1BRC參與者在MacOS上開發(fā),而評(píng)估機(jī)器運(yùn)行l(wèi)inux。

6. 多次運(yùn)行的帶時(shí)間戳的文件輸出

為了支持多次基準(zhǔn)測(cè)試運(yùn)行而不覆蓋先前的結(jié)果,實(shí)現(xiàn)了一個(gè)系統(tǒng),用于帶時(shí)間戳的文件輸出。這允許用戶多次運(yùn)行腳本并保留所有結(jié)果的歷史記錄。

filetimestamp=$(date +"%Y%m%d%H%M%S")

# ...(在每個(gè)分支的循環(huán)中)
HYPERFINE_OPTS="--warmup 0 --runs $RUNS --export-json $fork-$filetimestamp-timing.json --output ./$fork-$filetimestamp.out"

# ...(在基準(zhǔn)測(cè)試之后)
echo "Raw results saved to file(s):"
for fork in "$@"; do
  if [ -f "$fork-$filetimestamp-timing.json" ]; then
      cat $fork-$filetimestamp-timing.json >> $fork-$filetimestamp.out
      rm $fork-$filetimestamp-timing.json
  fi

  if [ -f "$fork-$filetimestamp.out" ]; then
    echo "  $fork-$filetimestamp.out"
  fi
done

總結(jié)

本文[1]通過實(shí)施這些技術(shù),目標(biāo)是創(chuàng)建一個(gè)用戶友好、信息豐富且健壯的shell腳本,為用戶提供運(yùn)行和分析基準(zhǔn)測(cè)試的極佳體驗(yàn)。希望這些想法能激發(fā)你提高你自己的shell腳本的用戶體驗(yàn)!

責(zé)任編輯:武曉燕 來源: 數(shù)據(jù)科學(xué)工廠
相關(guān)推薦

2020-07-13 07:10:09

SQLSQL語句查詢

2011-02-24 10:56:34

人才

2010-10-08 11:13:22

MySQL修改密碼

2015-05-08 09:47:35

2024-06-11 08:00:00

2023-09-06 08:00:00

ChatGPT數(shù)據(jù)分析

2025-01-02 08:21:32

2021-12-06 06:58:50

List重復(fù)數(shù)據(jù)

2022-06-09 08:46:58

ITCIO職業(yè)

2022-06-10 10:25:07

CIOIT領(lǐng)導(dǎo)者職業(yè)生涯

2025-01-03 08:48:20

列表推導(dǎo)式Python編程

2017-06-07 08:54:47

APM儀表板Lombok設(shè)計(jì)框架

2023-04-26 08:41:16

Git撤消更改

2023-04-03 20:29:00

Linux環(huán)境變量

2015-07-09 10:13:05

IT基礎(chǔ)設(shè)施支出數(shù)據(jù)中心

2023-05-15 18:32:20

2022-02-21 22:47:36

首席信息官IT技術(shù)

2022-05-30 16:42:20

數(shù)據(jù)中心

2023-12-08 08:53:37

數(shù)據(jù)中心人工智能自動(dòng)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)