国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

POSIX Shell腳本跨平臺(tái)兼容:Linux與macOS通用避坑指南

POSIX Shell腳本跨平臺(tái)兼容:Linux與macOS通用避坑指南 先問一個(gè)問題你在 macOS 上寫過一個(gè)能跑、但復(fù)制到 Linux 上就報(bào)錯(cuò)的 Shell 腳本嗎或者反過來在 Linux 上調(diào)試半天的腳本拿到 macOS 上第一條命令就掛了報(bào)錯(cuò)信息通常五花八門比如sed: 1: ... : invalid command code或者date: illegal option -- -d。很多人第一反應(yīng)是“系統(tǒng)壞了”折騰半天才發(fā)現(xiàn)問題出在兩個(gè)系統(tǒng)的工具鏈對(duì)同一個(gè)命令的解釋不一樣。今天我們來把這個(gè)標(biāo)準(zhǔn)聊清楚POSIX。它全稱是 Portable Operating System Interface可移植操作系統(tǒng)接口由 IEEE 制定。你可以把它理解成一份“Unix 系操作系統(tǒng)的共同契約”。只要系統(tǒng)聲明自己遵循 POSIX就必須提供一組最小可用的命令、接口和行為規(guī)則。換句話說POSIX 不是某個(gè)軟件而是一套規(guī)范你的 Shell 腳本之所以有機(jī)會(huì)在 Linux 和 macOS 之間來回遷移靠的正是這套規(guī)范。這篇文章會(huì)分三件事做先講清 POSIX 到底管什么再帶你在本機(jī)做一次兼容性檢查最后用一組真實(shí)示例把“一個(gè)容易踩坑的腳本”改寫成 Linux 和 macOS 都能穩(wěn)定運(yùn)行的版本。適合 Linux 運(yùn)維、后端開發(fā)、macOS 辦公用戶以及任何經(jīng)常寫自動(dòng)化腳本的人。如果只是為了看結(jié)論可以直接跳到最后一節(jié)的最佳實(shí)踐清單。1. POSIX 到底是什么POSIX 的全稱是 Portable Operating System Interface直譯就是“可移植操作系統(tǒng)接口”。它由 IEEE 標(biāo)準(zhǔn)化組織維護(hù)本質(zhì)是一系列標(biāo)準(zhǔn)文檔規(guī)定了操作系統(tǒng)應(yīng)該向應(yīng)用程序提供哪些接口。這里要注意POSIX 不是一個(gè)可以直接安裝的軟件而是一套行為規(guī)范。操作系統(tǒng)廠商可以在自己的產(chǎn)品里實(shí)現(xiàn)這套規(guī)范也可以部分實(shí)現(xiàn)、部分不實(shí)現(xiàn)。對(duì) Shell 腳本開發(fā)者來說POSIX 主要管三件事范圍管什么Shell 語(yǔ)法定義了if、for、case、函數(shù)、變量、重定向等基礎(chǔ)語(yǔ)法保證腳本在 POSIX 兼容的 Shell 里行為一致命令行工具規(guī)定了ls、grep、sed、awk、find、date等核心命令至少要支持的參數(shù)和行為系統(tǒng)接口為 C 語(yǔ)言等提供統(tǒng)一的系統(tǒng)調(diào)用接口比如文件操作、進(jìn)程管理、信號(hào)處理也就是說一個(gè)遵循 POSIX 規(guī)范寫的 Shell 腳本應(yīng)該能在任意一個(gè) POSIX 兼容系統(tǒng)上運(yùn)行不需要因?yàn)閾Q了操作系統(tǒng)就重寫。Linux 和 macOS 都屬于類 Unix 系統(tǒng)底層都實(shí)現(xiàn)了 POSIX 規(guī)范的大部分內(nèi)容。這是兩者能“通用”的根基。不過這里有一個(gè)關(guān)鍵點(diǎn)POSIX 給出的是“最基礎(chǔ)”的版本。操作系統(tǒng)可以在 POSIX 之外提供額外功能例如 GNU 工具集就加了大量擴(kuò)展參數(shù)bash、zsh 也在 POSIX 語(yǔ)法之外增加了自己的語(yǔ)法糖。這就導(dǎo)致一個(gè)現(xiàn)象很多腳本不是不兼容 POSIX而是用了太多“超出 POSIX 的擴(kuò)展”結(jié)果換了一個(gè)系統(tǒng)就找不到這些擴(kuò)展了。2. 適用場(chǎng)景與使用邊界這個(gè)主題直接對(duì)應(yīng)的場(chǎng)景是你需要維護(hù)一個(gè)同時(shí)面向 Linux 服務(wù)器和 macOS 開發(fā)機(jī)的腳本或者你經(jīng)常把自己的腳本從一臺(tái)機(jī)器復(fù)制到另一臺(tái)機(jī)器。適合使用 POSIX 兼容寫法的場(chǎng)景運(yùn)維腳本需要在 Linux 服務(wù)器、macOS 本機(jī)同時(shí)跑例如日志清理、備份、環(huán)境初始化??缙脚_(tái)的 CI/CD 腳本GitHub Actions、GitLab CI 的 runner 可能跑在 Ubuntu 上也可能跑在 macOS 上。開源項(xiàng)目代碼倉(cāng)庫(kù)里附帶install.sh、setup.sh使用者分布在各種系統(tǒng)。長(zhǎng)期維護(hù)的自動(dòng)化任務(wù)不希望每次升級(jí)系統(tǒng)或遷移平臺(tái)都重新改一遍腳本。不太適合的場(chǎng)景只需要在 Linux 服務(wù)器上跑的復(fù)雜業(yè)務(wù)邏輯沒有必要犧牲 bash 的數(shù)組、正則等特性。需要大量調(diào)用grep -P、sed -r、date -d這類 GNU 擴(kuò)展命令的腳本強(qiáng)行改成 POSIX 寫法收益很低。涉及 GUI、AppleScript、launchd 等 macOS 獨(dú)有能力的腳本這些本來就不屬于 POSIX 范圍。另外必須說明一個(gè)邊界POSIX 只保證“常規(guī)行為”一致。如果你的腳本會(huì)處理用戶隱私數(shù)據(jù)、連接企業(yè)服務(wù)器或操作生產(chǎn)環(huán)境還需要額外關(guān)注權(quán)限控制和審計(jì)。腳本如果涉及個(gè)人信息采集要遵守公司數(shù)據(jù)規(guī)范如果用于生產(chǎn)部署要先在測(cè)試環(huán)境驗(yàn)證如果腳本里包含密鑰或敏感路徑不要硬編碼??缙脚_(tái)兼容只是第一步安全和合規(guī)風(fēng)險(xiǎn)不能忽略。3. 為什么你的 Shell 腳本能在 Linux 和 macOS 通用很多新人以為“Linux 和 macOS 都是 Unix 系統(tǒng)所以腳本天然通用”這個(gè)理解不夠準(zhǔn)確。macOS 底層雖然基于 DarwinBSD 系但它的用戶態(tài)工具和 Linux 默認(rèn)工具并不是一回事。Linux 發(fā)行版默認(rèn)帶的命令工具大多是 GNU 工具集比如coreutils、sed、grep、find都來自 GNU 項(xiàng)目。macOS 默認(rèn)帶的這些命令則主要來自 BSD 工具集。兩份實(shí)現(xiàn)都遵守 POSIX 標(biāo)準(zhǔn)但 POSIX 之外的擴(kuò)展參數(shù)、默認(rèn)行為、錯(cuò)誤提示風(fēng)格差別很大。舉個(gè)最常見的例子sed的原地修改參數(shù)# GNU sedLinux 常見 sed -i s/foo/bar/ config.txt # BSD sedmacOS 常見 sed -i s/foo/bar/ config.txt兩條命令都做“直接修改文件”這件事但 macOS 的 BSD sed 要求必須提供一個(gè)備份后綴參數(shù)哪怕是為空字符串。GNU sed 則把這個(gè)參數(shù)省略時(shí)當(dāng)作“不生成備份”。你如果在 macOS 上直接運(yùn)行 Linux 那種sed -i s/foo/bar/ config.txt寫法系統(tǒng)會(huì)把s/foo/bar/當(dāng)成備份后綴結(jié)果源文件被改名成config.txts/foo/bar/然后 Sed 報(bào)錯(cuò)退出。再看date命令# GNU dateLinux date -d 2025-01-01 # BSD datemacOS date -j -f %Y-%m-%d 2025-01-01-d參數(shù)在 GNU date 里表示要解析的時(shí)間字符串在 BSD date 里完全不存在macOS 會(huì)報(bào)illegal option -- d。所以“同一條命令在 Linux 能用、在 macOS 不能用”不是偶然而是工具集差異導(dǎo)致的必然結(jié)果。那為什么大家還是覺得“Shell 腳本能在 Linux 和 macOS 通用”呢因?yàn)橹灰@著這些擴(kuò)展差異走只使用 POSIX 明確規(guī)定的基礎(chǔ)語(yǔ)法和參數(shù)兩邊就都能識(shí)別。這才是 POSIX 對(duì)普通開發(fā)者的真正價(jià)值它告訴你哪些寫法是安全的公共交集。4. 環(huán)境檢查先確認(rèn)系統(tǒng)能跑什么在動(dòng)手改寫腳本之前先花兩分鐘確認(rèn)本機(jī)的實(shí)際情況。不同系統(tǒng)的默認(rèn) Shell 不同/bin/sh指向的解釋器也不同這直接影響腳本行為。先看當(dāng)前登錄 Shellecho 當(dāng)前登錄 Shell: $SHELL # 查看當(dāng)前 Shell 的可執(zhí)行文件路徑 ps -p $$ -o comm # 查看系統(tǒng)類型 uname -s再看/bin/sh到底是誰(shuí)ls -l /bin/sh在 Debian 系 Linux 上/bin/sh通常指向dash這是一個(gè)嚴(yán)格遵循 POSIX 的最小解釋器。在有些 Linux 發(fā)行版上/bin/sh也指向bash但 bash 在作為sh啟動(dòng)時(shí)會(huì)進(jìn)入 POSIX 模式很多擴(kuò)展語(yǔ)法會(huì)被禁用。macOS 的/bin/sh則通常是一個(gè)兼容 POSIX 模式的 bash 2 系列版本實(shí)際是 bash 以 sh 模式運(yùn)行。不管指向誰(shuí)只要腳本按照 POSIX 語(yǔ)法寫這些解釋器都能執(zhí)行一旦你用 bash 擴(kuò)展語(yǔ)法比如數(shù)組、$RANDOM、[[ ]]在 dash 或 POSIX 模式下就可能直接報(bào)語(yǔ)法錯(cuò)誤。再看系統(tǒng)到底提供了哪些常用命令command -v sed command -v grep command -v awk command -v date command -v curlcommand -v是 POSIX 標(biāo)準(zhǔn)推薦的查找命令方式比which更可靠因?yàn)閣hich在 macOS 和 Linux 上的行為不完全一致。如果這一步返回空說明系統(tǒng)里沒有對(duì)應(yīng)的命令腳本要做前置判斷。最后確認(rèn)一下腳本文件本身的字符編碼和換行符file your_script.sh正常輸出應(yīng)該是類似ASCII text executable。如果出現(xiàn)with CRLF line terminators或者UTF-8 Unicode (with BOM) text說明腳本可能來自 Windows 或帶 BOM 頭的文本編輯器運(yùn)行時(shí)會(huì)有隱患。CRLF 問題在跨平臺(tái)項(xiàng)目里非常常見后面單獨(dú)說。5. 編寫可移植 Shell 腳本的實(shí)戰(zhàn)示例現(xiàn)在進(jìn)入重頭戲。我們拿一個(gè)典型的“在 Linux 能跑、macOS 上會(huì)炸”的腳本逐步改寫成 POSIX 兼容版本。5.1 一個(gè)明顯不兼容的腳本先看原始版本這個(gè)腳本集中了最常見的幾個(gè)跨平臺(tái)坑#!/bin/bash # 一個(gè)典型在 Linux 能跑、macOS 會(huì)炸的腳本 today$(date -d 2025-01-01 %Y/%m/%d) echo 今天是: $today sed -i s/foo/bar/ config.txt name$RANDOM echo 隨機(jī)數(shù): $name fruits(apple banana orange) echo 第一個(gè)水果: ${fruits[0]} read -p 請(qǐng)輸入你的名字: user_name echo 你好, $user_name這里有五處問題date -d是 GNU date 擴(kuò)展macOS 不支持。sed -i的參數(shù)格式在 GNU sed 和 BSD sed 之間不一致。$RANDOM是 bash 擴(kuò)展dash 和 POSIX 模式?jīng)]有這個(gè)變量。fruits(...)數(shù)組語(yǔ)法是 bash 擴(kuò)展POSIX sh 不支持。read -p提示符參數(shù)是 bash 擴(kuò)展POSIX sh 的read不接受-p。5.2 改寫為 POSIX 兼容版本改寫后的版本只使用 POSIX 規(guī)定的語(yǔ)法和命令同時(shí)在 Linux 和 macOS 上都能運(yùn)行#!/bin/sh # 兼容 Linux 和 macOS 的可移植版本 # 1. date: 使用通用的 FORMAT 寫法 today$(date %Y/%m/%d) echo 今天是: $today # 2. sed: 根據(jù)系統(tǒng)類型選擇參數(shù) if [ $(uname -s) Darwin ]; then sed -i s/foo/bar/ config.txt else sed -i s/foo/bar/ config.txt fi # 3. 隨機(jī)數(shù): 從 /dev/urandom 讀取兩個(gè)字節(jié)替代 $RANDOM rand$(od -An -N2 -tu2 /dev/urandom | tr -d ) echo 隨機(jī)數(shù): $rand # 4. 不使用數(shù)組改用 set -- 生成位置參數(shù) set -- apple banana orange echo 第一個(gè)水果: $1 echo 第二個(gè)水果: $2 # 5. 用 printf 輸出提示用 read 無(wú)參數(shù)讀取 printf 請(qǐng)輸入你的名字: IFS read -r user_name echo 你好, $user_name逐行解釋date %Y/%m/%d是 POSIX 標(biāo)準(zhǔn)格式兩邊都支持。通過uname -s判斷是不是 macOS再選擇不同的sed -i參數(shù)。這是處理這類參數(shù)差異時(shí)最直白的辦法。用od從/dev/urandom讀取隨機(jī)字節(jié)/dev/urandom在 Linux 和 macOS 都存在是系統(tǒng)級(jí)隨機(jī)源。set -- apple banana orange是 POSIX 里創(chuàng)建“列表”的常見手法把所有值放到位置參數(shù)里用$1、$2、$訪問。IFS read -r user_name是 POSIX 推薦讀取輸入的安全寫法IFS防止輸入內(nèi)容被去除首尾空白-r防止反斜杠被轉(zhuǎn)義。5.3 一個(gè)完整的可移植備份腳本上面是片段這里給一個(gè)完整可運(yùn)行的場(chǎng)景備份$HOME/Documents到$HOME/backups目錄并生成時(shí)間戳壓縮包。這個(gè)腳本在 Linux 和 macOS 上都可以直接跑。#!/bin/sh # 一個(gè)同時(shí)兼容 Linux 和 macOS 的簡(jiǎn)單備份腳本 set -eu BACKUP_DIR${HOME}/backups SOURCE_DIR${1:-$HOME/Documents} STAMP$(date %Y%m%d_%H%M%S) ARCHIVE${BACKUP_DIR}/backup_${STAMP}.tar.gz if [ ! -d $SOURCE_DIR ]; then echo 錯(cuò)誤源目錄不存在$SOURCE_DIR 2 exit 1 fi mkdir -p $BACKUP_DIR echo 正在備份$SOURCE_DIR tar -czf $ARCHIVE $SOURCE_DIR echo 備份完成$ARCHIVE echo 文件大小 ls -lh $ARCHIVE | awk {print $5}這個(gè)腳本用到了幾個(gè)工程化細(xì)節(jié)set -eu-e表示任何命令返回非零狀態(tài)就立即退出-u表示變量未定義時(shí)報(bào)錯(cuò)。這兩個(gè)選項(xiàng)能避免大量隱性 bug。${1:-$HOME/Documents}是 POSIX 參數(shù)展開語(yǔ)法允許傳一個(gè)源目錄參數(shù)不傳就用默認(rèn)值。${HOME}比~更可靠因?yàn)閪在賦值場(chǎng)景、引號(hào)內(nèi)外、不同 Shell 下行為并不一致。2把錯(cuò)誤信息輸出到標(biāo)準(zhǔn)錯(cuò)誤流。awk {print $5}從ls -lh輸出中取出文件大小列。執(zhí)行方式chmod x backup.sh ./backup.sh也可以傳參數(shù)./backup.sh /path/to/source6. 常見兼容性差異與坑點(diǎn)下面這張表整理了幾組最常見的 LinuxGNU與 macOSBSD差異都是實(shí)際開發(fā)中容易被撞到的地方。場(chǎng)景Linux / GNUmacOS / BSD建議sed 原地修改sed -i s/a/b/ filesed -i s/a/b/ file用uname判斷后分流date 解析指定時(shí)間date -d 2025-01-01date -j -f %Y-%m-%d 2025-01-01盡量用date %Y%m%d這類通用格式echo 默認(rèn)行為GNU echo 默認(rèn)不解釋轉(zhuǎn)義BSD echo 默認(rèn)解釋轉(zhuǎn)義一律用printf替代隨機(jī)數(shù)$RANDOMbash 擴(kuò)展$RANDOM不存在用/dev/urandomod數(shù)組arr(a b c)bash 擴(kuò)展不支持用set -- 位置參數(shù)正則匹配[[ $var ~ regex ]]POSIX sh 不支持用case或grep查找命令which cmd/usr/bin/which行為有差異用command -v cmdreadlinkreadlink -f可用-f行為不同避免依賴或做判斷反引號(hào) vs$()都支持都支持優(yōu)先用$()嵌套更清晰~展開通??捎猛ǔ?捎媚_本內(nèi)部?jī)?yōu)先用${HOME}再展開說說幾個(gè)容易忽略的點(diǎn)。第一個(gè)是echo。GNU 的echo默認(rèn)不解析轉(zhuǎn)義字符BSD 的echo默認(rèn)解析\n這類轉(zhuǎn)義。同一個(gè)腳本里如果寫了echo hello\nworldLinux 可能輸出字面量hello\nworldmacOS 可能輸出兩行。最穩(wěn)妥的做法是全程用printf因?yàn)?POSIX 對(duì)printf的行為定義非常明確。比如printf hello\nworld\n第二個(gè)是grep的默認(rèn)行為差異。GNU grep 在某些 locale 下對(duì)大小寫、字符類的處理與 BSD grep 略有差異尤其是用了類似[[:alnum:]]這種字符類時(shí)。常規(guī) ASCII 環(huán)境問題不大但考慮跨平臺(tái)時(shí)最好顯式設(shè)置LC_ALLC避免 locale 影響結(jié)果。第三個(gè)是readlink -f。GNU readlink 的-f能遞歸解析所有軟鏈接BSD readlink 的-f也存在但行為與 GNU 不完全一樣尤其處理不存在的路徑時(shí)。如果腳本里需要把相對(duì)路徑轉(zhuǎn)絕對(duì)路徑建議用cd $(dirname $0) pwd這種組合方式雖然笨一點(diǎn)但可移植性更好。第四個(gè)是換行符和腳本編碼。Windows 上編輯過的腳本傳到 Linux 或 macOS 后行尾可能是\r\n系統(tǒng)會(huì)報(bào)bad interpreter: /bin/sh^M: no such file or directory或command not found。排查方法先執(zhí)行file script.sh如果輸出包含with CRLF line terminators說明需要轉(zhuǎn)換# Linux sed -i s/\r$// script.sh # macOS sed -i s/\r$// script.sh也可以在 Windows 側(cè)把編輯器的換行符改成 LF。7. 工具鏈ShellCheck 與自動(dòng)化測(cè)試手工排查差異很費(fèi)精力更好的辦法是引入靜態(tài)檢查工具。ShellCheck 是社區(qū)最流行的 Shell 腳本靜態(tài)分析工具能直接識(shí)別出許多非 POSIX 兼容的寫法并給出修改建議。安裝方式# Debian / Ubuntu sudo apt update sudo apt install -y shellcheck # macOS brew install shellcheck # 基于 Red Hat 的發(fā)行版 sudo yum install -y shellcheck 或 sudo dnf install -y shellcheck檢查腳本時(shí)指定使用 POSIX 模式shellcheck -s sh your_script.sh-s sh告訴 ShellCheck 按 POSIXsh標(biāo)準(zhǔn)檢查而不是 bash。如果腳本里用了$RANDOM、數(shù)組、[[ ]]、read -p等 bash 擴(kuò)展ShellCheck 會(huì)給出對(duì)應(yīng)提示。這一步能提前發(fā)現(xiàn) 80% 的跨平臺(tái)問題。在多人協(xié)作項(xiàng)目里可以把 ShellCheck 集成到 CI。GitHub Actions 是比較常見的選擇下面是一份可以放到倉(cāng)庫(kù).github/workflows/下的配置示例name: shellcheck on: [push, pull_request] jobs: shellcheck: runs-on: ubuntu-latest steps: - uses: actions/checkout - name: Run ShellCheck run: | sudo apt-get update sudo apt-get install -y shellcheck for f in $(find . -name *.sh); do shellcheck -s sh $f done如果要在多個(gè)系統(tǒng)上實(shí)測(cè)可以加一個(gè)矩陣任務(wù)同時(shí)跑 Ubuntu 和 macOS 的 runnerjobs: test: strategy: matrix: os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout - name: Run script test run: | ./your_script.sh矩陣測(cè)試會(huì)讓每次提交都在 Linux 和 macOS 兩個(gè)環(huán)境里各跑一遍效果比本地手動(dòng)切換系統(tǒng)更可靠。8. 資源占用與性能觀察Shell 腳本本身對(duì)資源占用不是重點(diǎn)需要注意的其實(shí)是執(zhí)行效率。Shell 每執(zhí)行一條外部命令都要?jiǎng)?chuàng)建一個(gè)新進(jìn)程。循環(huán)里如果反復(fù)調(diào)用外部命令性能會(huì)很差。例如for line in $(cat file.txt); do echo $line | grep error done這段代碼對(duì)文件每行啟動(dòng)兩個(gè)子進(jìn)程文件一大會(huì)非常慢。更好的做法是用awk一次性完成awk /error/ {print} file.txt在跨平臺(tái)環(huán)境里還要注意同樣邏輯的awk、grep在 Linux 和 macOS 上的性能差異可能來自默認(rèn) locale。GNU 工具在LC_ALLC下通常更快BSD 工具相對(duì)樸素。做性能測(cè)試時(shí)可以先統(tǒng)一環(huán)境變量再對(duì)比time LC_ALLC ./backup.sh time LC_ALLen_US.UTF-8 ./backup.sh觀察腳本進(jìn)程數(shù)和內(nèi)存占用可以用# 腳本啟動(dòng)后在另一個(gè)終端執(zhí)行 ps -ef | grep your_script.sh一般的 POSIX 腳本不會(huì)像 Python 或 Node 那樣占用幾百 MB 內(nèi)存主要的開銷集中在外部命令數(shù)量上。能少開一個(gè)子進(jìn)程就少開一個(gè)這是 Shell 腳本性能優(yōu)化的基本思路。如果你處理的是批量任務(wù)比如批量重命名幾百個(gè)文件、批量解壓壓縮包建議先用小樣本跑一次看耗時(shí)再?zèng)Q定是否并行。POSIX 腳本里做并行可以用和wait# 后臺(tái)并行執(zhí)行wait 等待所有任務(wù)結(jié)束 for file in *.tar.gz; do tar -xzf $file done wait echo 全部解壓完成這個(gè)語(yǔ)法是 POSIX 支持的Linux 和 macOS 都能跑但要注意 CPU 核數(shù)限制任務(wù)太多反而拖慢系統(tǒng)。9. 常見問題與排查方法問題現(xiàn)象可能原因排查方式解決方案啟動(dòng)腳本報(bào)bad interpreter: /bin/sh^M腳本換行符是 CRLFfile script.sh查看輸出轉(zhuǎn)換成 LF 換行報(bào)command not found但命令明明存在腳本里用了 bash 擴(kuò)展語(yǔ)法解釋器不支持shellcheck -s sh script.sh改寫為 POSIX 寫法sed: 1: ...: invalid command codesed 參數(shù)格式不兼容在 macOS 上測(cè)試用uname分流參數(shù)date: illegal option -- -dGNU date 擴(kuò)展-d在 macOS 不可用檢查date --help或man date改用通用格式date ...read: -p: invalid optionread -p是 bash 擴(kuò)展檢查read幫助用printf輸出提示[: unexpected operator[[ ]]在 POSIX sh 中不支持查看報(bào)錯(cuò)行號(hào)改用[ ]或case腳本在 Linux 正常macOS 運(yùn)行時(shí)變量為空使用了$RANDOM等 bash 專屬變量查看變量是否被賦值用/dev/urandom生成find 命令參數(shù)報(bào)錯(cuò)GNU find 與 BSD find 參數(shù)有差異對(duì)比f(wàn)ind -help簡(jiǎn)化 find 語(yǔ)法或分流處理ShellCheck 提示SC2039使用了非 POSIX 命令或參數(shù)查看問題編號(hào)按提示替換為 POSIX 寫法排查時(shí)有一個(gè)通用思路先把報(bào)錯(cuò)信息復(fù)制出來定位到腳本行號(hào)再確認(rèn)當(dāng)前解釋器執(zhí)行ps -p $$ -o comm接著用shellcheck -s sh做靜態(tài)檢查最后單獨(dú)在命令行測(cè)試那一條命令排除變量值帶來的干擾。10. 最佳實(shí)踐與團(tuán)隊(duì)協(xié)作寫到這里把最重要的實(shí)踐建議匯總一下可以作為團(tuán)隊(duì)腳本規(guī)范的參考。第一Shebang 統(tǒng)一用#!/bin/sh。如果腳本不需要 bash 特性這個(gè)寫法最大程度保證了可移植性。如果確實(shí)必須用 bash也要明確寫#!/bin/bash并接受跨平臺(tái)風(fēng)險(xiǎn)macOS 上默認(rèn) bash 版本較低很多在 Linux 上正常的功能可能不存在。第二善用set -eu。-e讓腳本在出錯(cuò)時(shí)及時(shí)退出-u防止漏定義變量。雖然有時(shí)這兩項(xiàng)會(huì)讓腳本更“敏感”但長(zhǎng)期維護(hù)時(shí)收益遠(yuǎn)大于麻煩。第三命令輸出用printf。這是最容易被忽略的一點(diǎn)。echo在不同系統(tǒng)上的轉(zhuǎn)義行為不一致一次寫成printf后面就不用再踩坑。第四變量加引號(hào)路徑用${HOME}。不加引號(hào)時(shí)變量值里的空格會(huì)被當(dāng)作多個(gè)參數(shù)這在處理中文路徑、帶空格的文件名時(shí)經(jīng)常出問題。寫成$var才能保證整個(gè)值作為一個(gè)整體傳遞。第五優(yōu)先使用 POSIX 子集再按需擴(kuò)展。開發(fā)時(shí)就讓 ShellCheck 在-s sh模式下跑過比發(fā)布到生產(chǎn)環(huán)境再修要高效得多。第六把復(fù)雜的條件判斷用case替代[[ ]]。case是 POSIX 原生語(yǔ)法語(yǔ)義清晰典型場(chǎng)景是判斷參數(shù)或系統(tǒng)類型case $(uname -s) in Darwin) echo macOS ;; Linux) echo Linux ;; *) echo 未知系統(tǒng) 2 exit 1 ;; esac第七CI 里做多平臺(tái)矩陣測(cè)試。即使你的開發(fā)機(jī)是 macOS也不能保證線上 Linux 表現(xiàn)一致。GitHub Actions 免費(fèi)提供 ubuntu 和 macos 兩種 runner把關(guān)鍵腳本放進(jìn)去跑一遍能避免大量“本地能跑服務(wù)器掛了”的問題。第八涉及生產(chǎn)環(huán)境、服務(wù)器操作、敏感數(shù)據(jù)時(shí)腳本要加權(quán)限限制和審計(jì)。不要隨意用一個(gè)未知來源的腳本配合管理員權(quán)限執(zhí)行如果腳本里需要密碼或密鑰優(yōu)先使用系統(tǒng)環(huán)境變量或密鑰管理服務(wù)不要硬編碼進(jìn)文件。11. 總結(jié)與下一步POSIX 的價(jià)值不是讓你記住所有標(biāo)準(zhǔn)條款而是給你一條“最安全的公共路徑”在 Linux 和 macOS 之間遷移腳本時(shí)凡是 POSIX 明確規(guī)定的語(yǔ)法和參數(shù)兩邊都能認(rèn)凡是工具集各自的擴(kuò)展就要小心處理。理解了這一點(diǎn)sed -i報(bào)錯(cuò)、date -d報(bào)錯(cuò)、$RANDOM缺失這類問題就不再神秘了。最先要驗(yàn)證的功能是把現(xiàn)有腳本用shellcheck -s sh掃一遍看看有多少隱藏的非 POSIX 寫法。最容易踩的坑是換行符和sed -i參數(shù)差異這兩個(gè)問題在團(tuán)隊(duì)跨平臺(tái)協(xié)作里出現(xiàn)頻率最高。后續(xù)可以把 ShellCheck 和雙系統(tǒng)矩陣測(cè)試放進(jìn) CI再逐步把常見運(yùn)維腳本改造成 POSIX 兼容版本。這樣不僅 Linux 和 macOS 能跑以后遷移到其他類 Unix 系統(tǒng)也會(huì)輕松很多。假如你還沒想好從哪里入手建議從手邊最常用的部署腳本開始先跑通一次完整改造后面的提升就是體力活了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久亚州精品成人Av无| 麻豆久久久一区二区| 99精品综合久久久久五月天| 伊人久久蜜月| 亚洲三级网址久久最新| 天天综合日韩网| 亚洲自拍天堂| 岛国1区2区3区在线观看| 玖玖无码超碰| 黑人免费福利视频| 97美日韩视频| 四虎精品永久在线观看| 啊啊啊啊啊舒服| 少妇69中文| 91oumei| 亚洲成人久久一区二区| 先锋激情∨在线视频播放| 欧美激情 亚洲色图| 欧美色图人妻| 午夜精品久久久久久久99热影院| 亚洲有码 欧美精品| 中文字幕aⅴ在线视频| 亚洲国产婷婷在线播放| AA级电影三区| 国产在线激情视频| 综合操逼| 美中日韩无码| 欧美性巨大╳╳╳╳╳高跟鞋| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 人人弄人人摸| 一本色道久久天天射天天干| 久久美女国产| 免费看日产一区二区三区| 国产精品自拍xxxx| 入口操逼网站| 亚洲无码一区二区三区三州| 99热aaa| 极品粉嫩少妇视频| 欧美91久久久久| 密臀视频一区二区三区| 91久久久久久久| 超碰午夜| 麻豆天美在线| 精品九九| www亚洲免费| 日韩精品永久在线观看| 色婷久久| 亚洲精品天天影视综合网 | 日韩三级在线观看网站| 欧美黑人猛交春色影视大全| 天天天肏屄欧美| 欧美激情专区| 亚洲精品美女久久久久久久久| 日韩欧美国产高清视频| 天天干天天操天天拍| 99xav| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 日日噜噜夜夜久久亚洲一区二区 | 国产日韩区| 免费视频a级毛片免费视频| 久久人妻97久久久久久久| 精品一区99999| 国产在线视频二区| 艳尻美人妻| 午夜男女爽爽爽影院视频| 久久久久亚洲?V片无码V| 亚洲欧美成人网站AAA| 天天干干天天干干| 久久精品无码不卡| 97超碰国产精品| 国模无码一区二区三区在线| 韩日欧亚a级| 伊人久久国产免费观看视频| 亚洲精品美女久久久久久久久| 色综合加勒比| 国产视频第二页| 97一本大道亚洲一区| 欧洲综合视频| 五月婷婷深深爱| 金莲网址| 亚洲国产婷婷在线播放| 欧美影院一区二区三区| 久草线上视频免费看| 久久av网| 成人精品视频一区二区| 女人高潮抽搐喷水视频网站| 色五天伊人| 26uuu久久| 久久色精品视频在线| 丝袜制服字幕在线| 人妻黑丝袜电影| 日日日啊啊啊| 国产日韩精品一区二区三区| 欧美成人黄网色网站| 久草国产在线视频| 97欧美性爱| 韩国三级理论在线| 亚洲国产欧美中文永久| 九月色婷婷| 涩涩五月天| 97操97色| 麻豆天美制片厂网站视频| 97干色天堂| 操逼视频免费日韩无码| 中日韩久久人妻一区二区| 免费视频a级毛片免费视频| 中文字幕亚洲热播人妻| 在线人人人人人人精品超| 国产操逼逼网| 久久老子无码午夜伦不卡| 久久久久久久综合,国产| 亚洲日韩青青草色月| 视频分类 国内精品| 欧美久久伊人| 成人精品视频一区二区| 亚洲天堂少妇| 男人的天堂99| 亚洲少妇色图自慰直播| 午夜寂寞欧美| 欧美极度丰满熟妇hd| 啊v视频在线观看| 午夜丁香婷婷| 91人妻素女| 青青草一区二区三区四| 日韩强奸av| 97视频新免费| 丰满少妇一区二区三区免费看| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 五月久久HDAV| 91丨熟女丨丰满熟女| 乱伦图一区| 天天操天天干一区二区| 丰满人妻大屁一区二区| www.99视频| 婷婷综合网站| 三上制服丝AV| 亚洲精品国产拍免费91在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 97色干| 色色色欧美| 93人人操人人| 人妻熟女一区在| 亚洲天堂人妻一区二区| 欲女人妻性色av| 激情另类激情| 日本三级网页| 91夜夜蜜桃臀1区2区3区| 午夜精品久久久久久久| 亚洲国产欧美日韩人妻日中文| 超碰99在线观看| 国产精品无码av| 东北少妇高潮zzzz| 欧美A片中文字幕| 久久乐| 97高清啪啪| 久久久蜜桃臀无码视频| 久99视频| 97超碰日韩| 青青草视频久久| 电家庭影院午夜69久久夜色精品国产69乱 | 亚洲 日本 一 二 三| 国内毛片四区| 久操高青| 国产白嫩漂亮KTV在线| 精品中文一区二区| 亚洲欧美国产其他二区| 999热日韩精品| 97色伦欧美| 久久中文字幕一区不卡| 欧美日日人人天天| 欧美日不卡| 一区不卡在线观看av| 中文字幕二区| 国产精品久久久久久夜夜夜| 天天草夜夜草高潮片| 欧美gv在线观看| 久久免费中文字幕在线观看| 久久伊人亚洲AV无码网站| 久99热| 欧洲Au麻豆| 久久精品亚洲东京热色播| 亚州操操穴网| 天天91~综合入口| 国产自偷自拍一区| 深田咏美亚洲精品福利社| 日本国产高清色www视频在线| 精品久久久九九九孕妇| 久偷拍| 色欲天天综合网| 色偷综合| 欧美伦乱爱| 校园春色欧美色图| 人妻干天天| 一级二级三级黑人无码| 九九拍拍精品视频在线播放| 日韩在线97| 欧美综合777| 东京热精品97综合网| 99久久无色码| 欧美午夜色妇色鬼| 精品九九九九九| 欧美日韩国产中文超碰| 新91视频.cmp| 99热自拍| 双插在线| 99久久综合| 本道综合精品| 91色宗合| 囯产精品久久久久久久久久梁医生| 曰本特级特黄特色黄色A级网站高清在线免费看| 北京专精特新企业招聘信息| 夜夜操91744565| 久久中日麻豆| 后入福利视频| 青青在线视频免费| www.99色| 无码乱人伦中文视频| 中文字幕在线免费观看视频| 色婷婷丁香五月| 色女99一级片在线观看| 啊啊啊啊啊啊啊网址在线观看| 欧美传媒一区| 在线综合网| 精品久久久久av影院| 欧亚免费视频| www.91欧美| 色九九久九九| 天天色天天干天天射| 日韩人妻一区二区精品| 九九久久综合| 超碰三级秋霞| 蜜桃中文字日产乱幕4区| 熟妇高潮一区二区免费视频| 大香蕉乱级| 女优视频第10页| A V视频日本| 中亚黄色三级大片| 99re在线视频这里只有精品| 偷拍 精品另类 凸凹了四区| 国产精品自拍欧美在线| 国产热RE99久久6国产精品首| 中日韩久久久| 四虎影视永久在线免费| 97精| 99av| 日逼97| 欧美精品宗合| 无码动漫av中文字幕| 成全在线观看免费观看| 中日高清无码操逼视频| 日日摸日日碰| 蜜臀久久99精品久久久电影| 91一区二区三区蜜桃| 久久性爱大全| 91天堂视频| 嗯嗯啊啊啊好爽| 中国一级特黄大片护士| 夜色五月天| 亚洲AV人人澡人人爱| 久久精品久| 偷拍自拍在线视频观看| 亚洲欧美日产国产91毛片| 亚洲乱色熟女一区| 综合久久99| 亚洲色图综合网| 激情色图| 五月激情在线| 一本色道久久综合狠狠操| 亚洲美女AV无码| 国产女人成人精品视频| 97色涩| 欧美高清色| 91c色| 亚洲97P| 99在线精品视频| 国产精品蜜乳AV| 日本97久久久精品| 美女天天干| 1024久久高清视频| 亚洲一区二区三区春色| 男人夜色天堂ss| 亚洲图片欧美另类综合免费视频大大香| 视频国产欧美在线播放| 男人天堂久久精品| 欧美成年人性爱视频免费观看| 丁香五月性| 土豪酒店各种姿势玩弄极品幼稚| 岛国在线免费视频| 狠狠操一区二区| 天堂69亚洲精品中文字| 超碰国产情侣自拍网| 91色宗合| 男人天堂2019亚洲| 91丨国产丨白浆秘 洗澡动漫| 六九九九| 亚州男人天堂| 91 亚洲 欧洲| 成人精品无码| 成人日本精品九区| 日韩99精品视频综合区| 精品久久大胆人体| 欧美性爱另类综合| 91熟女网| 亚洲熟女av中文字幕| 99操碰| 天操天操夜操夜月月年年操操| 巨爆乳一区二区爆乳区| 男人的天堂在线| 国产精品久久久久久久黄无码| 久久大陆| 亚洲图片欧美在线视频| 国产9l 大屁股| 久久久草成人网站久久久草成人久久久草久久久 | 熟女中出视频| 91社操逼| 国产精品丝袜在线| 夜夜嗷嗷一区二区| 日本道久久综合色色| 色欲久久99国产精品久久久久久| 综合网欧| 五月丁香啪| 人人操人人爽人人操人人| 性欧美天天| 92人人操人人| 亚洲一区日韩精品中文字幕| 美腿丝袜高跟网免费视频免费视频| 亚洲色图尤物视频| 欧美瑟综合| 精品人妻二区三区| 国产女人成人精品视频| 日韩字幕一区| 久久久久久久久久久久97| 99自拍B亚洲 | 日韩三级天堂在线观看| 91色香| 欧美日韩婷婷中文| 99久久婷婷国产综合精品草原| 超碰97色| 国产91丝袜在线播放蜜月| 欧美性猛交美女自慰91| 国人欧美精品一区二区| 亚洲国产成人福利在线观看| 天天综合网~91| 大香蕉综合久久| 俺去也婷婷| 伊人久久综合影院| 精品国产乱码久久久久久蜜臀| 久噜噜| 91neishe| 日韩av影片在线观看| 日本精品一级二级三级| 人妻精品一区二区| 久久久96精品| 嗯嗯啊啊日韩精品| 大香蕉综合在线| 青青草原狼av| 素人播放一区| AA丁香综合激情| 操逼视频色| 亚洲国产精品成人久久蜜臀| www亚洲欧美| 青草伊人久久| 亚洲人人夜夜澡人人爽| 天天澡天天爽日日av| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 嫩草影院在线观看精品| 国产精品亚洲无码| 青娱乐福利99| 精品国产三级av韩国在线| 视频二区美腿制服人妻欧美| 欧美色91| 青青草在线视频播放器| 九九av| AV色五月| 欧美后入式| 岛国999| 日本超碰色精品| 黑丝日韩av丝袜av| 91最新综合| 色性荡荡荡荡视频| 欧美人妻精品| 亚洲情色一区综合| 欧美熟女丝袜| 一区二区播放| 欧美性夜| 伊人天天久久动态图| 中文字幕蜜乳av| 亚洲成人贴图| 激情熟女12P| 久久免费99精品久久久久久| 家庭乱伦国产| 无码精品蜜桃一区二区三区ww| 欧美亚洲另类在线蜜桃| 日韩AV一起草| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 欧美强奸一区二区诱惑| 丁香五月性| 亚洲午夜免费狠狠干| 天美精品av| 精品久久久av| 亚洲综合色在线| 精品97久久| 天美精品原创av片国产| 成人无码在线超碰网| 涩涩这里只有精品视频| 欧美成人午夜免费福利785| www.久久| 最新av在线| 干妹子| 欧美性性性| 大色综合| 中文字幕亚洲热播人妻| 婷婷久久综合| 人妻人人澡人人爽人人| 曰本道人妻久久久在线不卡色视频| 我要色综合网站| 亚洲天天在线| AV无码久久久精品| 荡小穴在线观看| 亚洲 另类 丝袜 自拍 动漫| 综合色欧美| 老司机天天操| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 超碰69| 91性情| 国产精品亚洲天堂网址| 亚洲色图大香| 干妹子| 天堂69亚洲精品中文字| 亚洲国产无码精品首页久久久| 中文字幕二区日韩天堂| 久久久久久中文| 欧美日韩*字幕一区| 亚洲色欲天天人妻无码系列专区| 91伊人影视综合| 97超级久久| 日本东京热加勒比久久| 人妻日日夜夜精品| 激情在线青青操| 成人激情无码在线视频| 亚洲中文字幕日产无码久久| 亚洲伊人成综合成人网| 亚洲超碰在线| 欧美,亚洲,日韩,v,天堂,手机在线观看| 99热| 91狠| 91热| 六月丁香久久| 亚洲国产青青| 国内毛片婷婷六月色| 免費人妻夜夜爽天天爽爽一区| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 97超碰69| 亚洲美女精品九九视频| 久久婷婷亚洲| 999色欧美中文字幕| 一区二区三区黄色片a| 91天天日| 97国产人人| 麻豆精品久久久久久久| 97碰碰色| caorenqi shipin| 国产人妻久久精品一区二区三区| 国产一级黄色片在线观看| 日韩天天本| 久久这里是精品| 午夜精品久久久久久久99热影院| 久久在线观看免费视频| 青青草视频久久久久| 欧美在线91| 偷拍 精品 另类 四区| 欧美精品宗合| 亚洲一区二区三区麻豆传媒| 91人妻最真实刺激绿帽| 中文字幕人乱码中文字的预防方法| 伊人操你| 成人久久精品| 久久香蕉国产线看观看猫咪av| 中文字幕伊人| 久久精品色欧美aⅴ一区二区| 狠狠操狠狠燥| 久久黄黄| 狠狠操,使劲操| 白丝少妇一区二区| 亚洲欧美国产其他二区| 校园春色第一页| 99青草| 超碰在线欧美性爱激情| 亚洲男人的天堂网| 天堂种子在线www网资源| 久久久青青草| yazhousetuoumei| 超碰色男人操熟女| 蜜屁av| 色综合中文字幕不卡| 国内精品嫩模A∨私拍小视频| 屌妞视频久久久久久久 | 久久国99999| 国产高清MV操逼视频| AV女资源| 人人澡综合涩| 婷婷五月综合在线| 国产精品黑人一区二区三区| 91欧美性| 天天肏美女| 亚洲va有码在线天堂| 久操免费电影| m欧洲一级午老| 五月婷婷AV| 国产成人亚洲精品无码最新在线| 久久原创中文| 亚洲色图日韩丝袜制服一区二区五月在线| 蜜桃久久一区二区三区| 99热99在线播放激情| 日本欧美不卡| 超碰97在线中文| 北条麻妃99精品青青久久| 91人妻素女| 在线人成亚洲视频免费观看| julia国产在线 | 操逼片国产| 91丨人妻丨国产丨丝袜| 干妹子| 欧亚第一综合网| 中文字幕在线观看视频www| 成人无码在线超碰网| 97这里有精品| 国内外毛片在线观看| 97欧美精品综合| 久久丁香五月天| 久久久久久亚洲中文| 午夜性刺激视频免费观看| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 亚洲亚洲亚洲天堂天堂| 闷骚老熟女15P| 一色网男人的天堂| 99在线精品观看99| 黄片在线免费在线观看| 国产欧美岛国精品一区| 亚洲一卡二卡在线免费| 九九综合九九综合| 人爽不卡视频| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 性性久久| 中文幕97| 国产白领连续中出在线播放| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 天天综合网亚洲综合网| 亚欧美综合网。| 亚洲在高跟鞋自慰久久在色线| 五月天黄色av| 97 亚洲 日韩 欧美 在线| 婷婷香蕉欧美在线一区二区三区| 色综合色色| 天天肏夜夜肏| julia高潮后不停追击中出| 乱伦3P视频| 美国一区二区免费视频| 亚洲国产麻豆一区二区三区| 熟女精品va中文字幕| 亚洲最新中文字幕免费| 日韩激情中文字幕有码| AV综合中文字幕干| 激情婷婷五月天| 欧洲色色| 欧美久久草熟女| 暖暖精品二区三区观看| 四虎AV影视国产精品亚洲精品| 91新在线欧美| 97精品97久久| 色亚洲欧美| 国产熟妇 码视频户外直播| 久久超碰国产一区二区三区| av网站在线观看了| 强奸a片网| h在线看免费版在线看| 天美国产三级传媒| 久久一二三四五六七八九区区| 亚州色图片在线色| 午夜美女诱惑电源网| 91亚洲欧洲| 国产亚洲精品A在线观看下载| 精品国产91av一区二区三区| 亚洲精品日韩国产欧美| 亚洲精品久| 久久精品国产99国产精品亚洲| 麻豆天美在线喷水AV| 麻豆一区二区三区在线看| 91熟女视频| 伊人久久在线视频观看| 超碰碰碰碰| 99啪啪视频| 欧美成人国产精品| av网站免费看| 亚洲av无线观看| 婷婷五月天补不补| 亚洲黄a三级三级三级看三级| 中文字幕免费在线观看| 欧美性爱精品七区| 久久露脸国产老熟女| 亚洲情色一区综合| 97久久久久| 国产性爱在线视频一区二区| 无码又爽又硬又激情免费视频| 欧美精品 - 91爱爱| 五月天日日操夜夜操| 亚洲欧洲自拍图片专区满春格 | 97爱啪| 思思热国产高清| 亚洲国产高清福利视频| 91九色丨国产丨爆乳| 国产嫩草精品A88AV| 免费av在线播放二区| 人妻少妇色综合| 久久精品视| 久久丁香久草综合网| www九九热| 色网综合网| 一本色道无码DVD中文字幕| 综合色色婷婷| 天天在线91| 国产女人高潮嗷嗷嗷叫小说| 日本精品88888888| 亚洲熟女av中文字幕| 夜夜影视四色| 精品人妻一区春色| 中国AV美女| 久久9久9久99久9久9| 老鸭窝成人免费毛片视频| 国产精品久久久久久片| 国产精品电影推荐| 国产乱伦性爱区| 亚洲日韩av一区二区三区百合| 色97干| 色情五月婷婷| 色网亚洲人| 免费看久久久性性| 天天综合网亚洲综合网| 亚洲精品影视老司机| 91l欧美在线| 无码高清操逼网址| 精品亚洲俞拍视频一区| 女同女同恋久久级三级| 青青草日本中文字幕| 九九视频黄色片| 亚州再线| 欧美一区二区三区入口| 亚州色国| 日韩人成网站在线播放| 日本三级韩国三级美三级91| 97欧美性爱| 涩亚洲欧洲| 五月丁香激情综合| 少妇熟女一区二区三区| 热久久精品| 蜜乳视频网站| 伊人 俄罗斯 a v| 国产精品一二三在线看| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 色色五月婷| 精品国产乱子伦一区二区三区,精品一 | 日本一久是| 不卡啪啪视频| 天天伊人| 久久精品72| 亚洲精品啪视频| 日韩无码第3页| 国产精品一区人妻精品阁在线| 一区二区乱码福利| 夜夜国产一区| 国产一区在线免费播放| 九九热国产| 中文字幕版| 亚洲av影院在线观看| 熟女少妇一区二区三区| 欧美亚洲玖玖玖| 久久久久久久久久久免费精品| 免费97视频| 色婷婷六月| 内射小黄片| 午夜福利 成人 91| 丰满少妇一区二区三区四区观看| 性爱免费视频成人| 免费a在线播放v| 97久久久久| 伊人五月天| 舔人妻中文免费视频| juliaann丝袜| 啊啊啊在线观看免费视频| 黄片色区软件| 97超碰超碰| 久久人妻无码毛片A片麻豆| 伊人成人中文字幕久久网| 久久性爱视频99| 四虎精品亚洲| 国产美女激情| 麻豆天美国美国产AV| 99精品欧美一区二区三区桃色| 肥佬影院91| 9999九九九久久久| 久久天天摸| 熟女六十路| 国产人妖的免费的视频| 日韩综合色图| 熟女熟妇一区二区三区视频| 色婷婷综合久久久久中文一区二区 | 国产精品乱码久久久久| 天天影视之亚洲综合网| av在线人气| 综合激情五月天| 欧美 日韩 亚洲 春色| 亚洲情色欧美| 久久9久久| 伊人亚洲综合| 国产盗摄美女如厕大神作品在线观看| 婷婷五月花| 日韩中文字幕在线视频观看| 天天色天天干天天爱| 97亚洲综合| 熟妇人妻精品一区二区| 亚洲drav色图| 性性久久| 欧美操逼视频二区| 乱理日韩中文| 大香蕉操久久| 亚洲精品丝袜-不卡成人免费……| 午夜理论片在线观看免费| 一个国产在线综合网站| 激情黄色片在线观看| 黄骗免费网站| 欧美色涩| 久久久九九九| 97干色| 亚洲精品九九九| 91性情| 久久精品超碰| 亚洲熟女诱惑| 高清孕妇孕交 交| 蜜臀AV午夜精品久| 国产色呦呦| 亚一综合久久久久久久久久| 91精品久久久久五月天精品| 成人无码在线超碰网| 一级人妻性爱视频| 国产亚洲精品A在线观看下载| 精品免费视频国产一区| av毛片aaaaa免费看| a'v在线资源| 呦呦影院| 国产宅男宅女在线观看| 操B在线观看| 色综合久| 亚洲无码99| 丁香五月天婷婷姐| 亚洲色图加勒比| 天天综合网1| 风骚少妇视频中文字幕| …中文字幕亚洲乱,97人妻无码费视…| 美国三级日本三级久久99| 亚洲风情综合网| 天天干嫩逼网| 99亚洲精品| 美女操逼福利视频| 六月天婷婷| 毛片17S| 亚洲天堂日本| 91高清日| 欧美v日韩v亚洲v最新在线| av一区二区三区不卡| 多毛小伙内射老太婆| 久久久久久AV无码免费网站| 青青草日韩无码| 亚洲精品欧美专业| 天操天操夜操夜月月年年操操| 亚洲综合网91| 99这里只有精品国产| 成人免费福利在线观看| 亚洲欧洲偷拍一区| 国产精品不卡一区二区三区| 久久97视频| 日B操| 免費黃色視頻觀看一| 久久女人视频| 日韩色图 一区二区| 日本大香蕉综合网| 久久黄色视频一区二区三区| 激情五月综合| 亚洲天堂日本| 伊人操| 影音先锋乱| 青青网三级视频| 国产麻豆一区二三区| 亚洲加勒比| 人妻99p| 欧美高潮在线| 五月天精品| 成人小说视频在线精品欧美| 伊人久久婷婷| 加勒比五月天| 欧州一区二区三区四区| 久久婷婷影院| 国产乱码精品久久久久久| 综合久久2017| 强奸乱亚洲| 综合av影片| 精品国产三级av韩国在线| 久久婷色| 9997se| 久久中文字幕一区不卡| 欧美专区第一页| 蜜桃AV天堂| 久草国产在线视频| 91九九九小逼| 边做饭边操逼逼| 欧美九九爱| 中文字幕精品码亚洲| 日韩成人大片一区二区| 亚洲欧美国产va在线| 99人妻碰碰碰久久久久禁片| 欧美亚洲综合色| 亚洲天堂无码| 东北女人| 日本欧美一区二区三区视频麻豆| 丝袜六区| 97天堂| 成人情色一区二区| 天天天干977| 欧美视频在线视频免费va| 青青青草伊人精品| 欧美人妻久久精品二区三区| 日韩电影天堂视频二区三区| 欧美十八禁视频| 欧美色图亚州激情| 欧美高清无码免费视频高清版| 丝袜六区| 中文字幕国产在线天堂| 国产怡红院| 秋霞Av理论一级在线| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 激情国产乱伦Av| 亚洲日韩乱码中文无码蜜桃臀网站| 91精品微拍福利| 和协影院中文字幕三区| 欧美综合娱乐久久| 国产不卡的视频| 亚洲aV无码成人在线观看| 无码二级三级| 欧美拳交在线播放| 国产精品白领在线观看| 啊啊啊好舒服好爽啊啊啊视频| 欧美五十路熟| 超碰97首页| 亚洲欧美日韩综合在线尤物| 欧美碰碰综合色| 天天色悠悠激情| 久久久一区二区三区三州| 亚洲色悠悠久久88| 日本久久精品| 无码一区免费在线不卡| 超碰地址97| 欧美在线播放aaaa| 亚洲成a人v欧美综合天堂下载| 91色五月俺来也| 在线欧美69V免费观看视频| 久草毛片| 18精品一区| 自拍视频一区在线观看| 97精品一区二区视频在线观看| 欧美少妇熟女| 人人操人人摸人人看人人干| 97在线/亚洲| 日韩欧美成人大香蕉| 免费作爱一级视频| 偷拍亚洲| 蜜臀av中文字幕| 一区二区三区精品黑丝白丝酒店对鸡 | 亚州欧美另类| 青青草伊人久久| 桃花色涩综合影院| 久久亚洲中文字幕视频| 五月天AV资源| 欧美97在线观看| 久久婷婷视频| 国产一区二区三区久久久精品| 国产女性无套 免费观看| 国产精品一区二区三区四区五区| 久久深夜无码| 亚洲.欧美.丝袜.中文.综合| 天堂а√在线最新版在线| 日韩精品一区二区人人人| AV在线资源| 水澄无码AV| 人人摸人人叼| 亚洲色图尤物视频| 天堂男人网| 亚洲综合另类色图| 97超级欧美| 91爱综合| 色情婷婷| 大色综合网| 777琪琪午夜免费A片| 91国模| 亚洲第一男人天堂| 97日视频| 国产极品999| 99精品久久| 国产三区免费在线观看| 性爱网站一区二区| 成人羞羞视频国产| 天堂综合网| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 日本不卡三级网在线播放| 日本人妻A片成人免费看片| 亚洲成人日韩小说| 日B操| 亚洲一区日韩精品中文字幕| 欧美草草高清日韩视频| 亚洲少妇激情一区二区三区| 熟女欧美日韩综合婷婷| 女一区二区| 亚州成人a∨| 久久一二区四| 美女人妻色网站| 欧美有码激情视频一区二区三区| 五月婷婷AV| 国产亚洲综合欧美一区| 国内精品伊人久久久久影院会| 国产精品一区二区三区,亚洲综合| 草莓精品视频在线免费观看| 被男人吃奶很爽的毛片| 天天射天天操天天干天天吃2018 | 69精品在线| 欧美久久草熟女| 情色日播放AV| 婷婷三区| 美女高潮视频91| 99re8超碰| 欧美在线啊啊啊 | 亚洲精品影视老司机| 青娱乐国产精品| 日韩性爱再线视频| 欧美精品1区2区3区| 日韩精品一区的| 五月天婷婷综合| 国产欧美日韩在线观看麻豆传媒公司 | 98超碰日本| 大香蕉日亚洲日本亚大 | 日本道久久综合色色| 国产精选三级在线观看| 狠狠操狠狠爱| 久久99国产综合精品女同| 人妻插插人妻人| 日本新免费二区三区| 97久久天天综合色天天综合色电影| 啊啊啊在线看| 超碰在线91| 日本精品一级二级三级| 国产精品毛片?v一区二区三区| 神马久久久久久伦理片| 日本肏逼视频在线观看| 国产日韩美女小穴视频网站不卡| 超碰在线在公开超碰在线在公开| henhen91| 26uuu国产亚洲综合| 国产99久久99热这里只有精品15| 无码少妇精品一区二区60岁老人| 色综合五月天| 97超久碰| av日韩中文字幕| 男人天堂网站| 午夜福利在线合集| 操久久久久久| 欧亚日韩三区| 国产免费小视频| 久久精品福利影院| 精品国产肉丝袜在线拍国语| 国产原创精品| 日本加勒比无码专区一二三| 亚洲男人天堂手机版| 爱妃国产亚洲视频中文字幕| 蜜臀AV网站| 超碰在线974| 无码人妻丰满熟妇区毛片| 亚洲日韩美女丝袜美腿人妻视频| 一区二区三区免费视频入口| 日韩精品在线观看网站| 宅男91视频在线播放| 久久人体一区二区| 久久精品一区二区一8| 久久精品亚洲成a人天堂| 日本免费不卡二区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | AV天堂因数| 国产精品亚洲一级av第二区| 日本在线一二| 亚洲天堂资源| 日韩成人私密一级精品av| 影音先锋国产精品| 欧洲小说色图视频另类| 校园春色综合网| 美女黄频a美女大全免费皮| 中文字幕少妇色| 大香蕉伊人75| 人人操人人摸人| 久久一二三四五六七八九区区| 日韩熟女精一区二区三区不卡| 精品亚洲国产成人av网站| 亚洲情色五月天 | 亚洲精品欧洲色| 国产1769在线| 97资源免费视频| 亚欧免费观看视频| 久久精品国产精品亚洲艾通辽熟妇 | 中文字幕丝袜人妻| 久久啊啊| 丁香五月天堂网| 九九九九97| 欧美色视频在线| 九九热超碰97亚洲最新香蕉| 日韩综合色图| www.婷婷| 色网亚洲人| 美女一区二区国产精品| 国产二区三区粉嫩在线| 精品国产三级av韩国在线| 97九色人妻| 五十路三区在线| 9 9精品一区二区三区| 欧美97网| 综合激情五月丁香| 全国男人天堂网| 秋霞视频一区二区| 超碰 欧美| 日欧操屄视频| 欧美激情亚洲| www色色com| 久久精品国产亚洲粉嫩| 五月激情啪啪| 97免费视频在线| 久久亚洲不卡| 日韩欧美加勒比| 九九九九九九九九九九九免费国产| 亚洲天堂男人天堂网| 亚洲午夜免费狠狠干| 国产97视频| 超碰日本97美女人妻人人玩人人爱 | 国产乱人伦AVA麻豆软件.| 亭亭在线资源| 天天精品| 无马一区二区| 一区二区三区精品黑丝白丝酒店对鸡| 色九久| 国产av白丝| 一个人免费视频观看在线WWW| 伊人一区二区三区| 强奸乱伦麻豆| 国产又粗又长又大的视频| 日韩欧美女优电影| 日韩欧洲操屄视频| 色综合99999| 丝袜熟女一区二区三区| 我要色综合网站| 精精夜夜| 1级午夜影院费免区| 欧美青青草视频| 九九久久99| 亚洲av成人精品一区| 亚洲中文字幕日产无码久久| 黄页视频网站野外| 亚洲欧美97| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 欧洲站一级二级三级h| 91无码中出人妻视频| 伊人热综合| 亚洲国产蜜臀系列在线观看| 任你草| 操人人| 天天日天天干天天摸天天操| 爱爱动态120秒| 狼狼色丁香久久婷婷综合五月| 超碰97综合网| 国产suv精品一区二区四区999 | 国产外初女出血视频| 精品久久視頻在线| 亚欧成人综合影院| 99夜夜操| 亚洲熟女乱综合一区二区三区| 黄色av一区二区在线| а√天堂资源官网在线资源| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 91伊人久| 91九色蝌蚪在线观看| 成人开心网在线视频| 美女露胸露屁股| 91在线精品| 欧美精品精品一区二区| 久久久三区二区一区| 78久久久| 久久午夜伦| 欧美另类精品xxxx| 国产精品香蕉| 九九九九97| 人妻美腿丝袜制服诱惑综合天堂-| 亚洲精品日韩国产欧美| 人人干黄色| 97色亚洲| 久草色在线观看| 黄网站黄视频网站进入口| 涩五月婷婷| 人人操人人操草草| 久久受www免费人成| 亚州男人天堂| 97人人色| 秋霞鲁丝午夜无码一区二区三| 男人亚洲91首页在线| 欧美疯狂做爰xxxx| www.大香| 欧美真人抽搐一进一出gif| 欧美中日韩XXXX| 欧美精品欧美精品系列| 天堂射| 精品国产99| 91在线综合网| 95精品在线| 五月丁香在线| 91精品久久久久久77777| 人妻aa| 色乱二区| 亚洲AV秘 精品久久老牛影视| 最新无码国产| 最新国产精品| 97超碰色色| 96精品久久| 欧美精品黑人猛交高潮| 人妻激情视频| 欧洲一区二区| 四虎884| 偷拍亚洲情色| 超碰在线在公开超碰在线在公开| 青青伊人这里只有精品| 97精品97| 淫乱图区 | 综合久久2017| 精品国产乱码久久久久久蜜臀| 超碰97日韩| 爱逼综合| 91香蕉国产尤物视频| 精品黄色电影| 亚洲国产精品无码AV久久| 亚洲欧美电影| 婷婷操视频| 俄罗斯一区二区视频在线观看| 久久久精品电影| 久久男人精品| 久久久久久国产无码精品| 人妻日日干| 五月香婷婷| 精品夜夜澡人妻无码| 国产大片精久久久久久| 加勒比综合九九99视频在线播放|