久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

OpenShell:用模塊化dotfiles打造可移植的Shell終端工作流

OpenShell:用模塊化dotfiles打造可移植的Shell終端工作流 說實話早幾年的我每次換電腦都會在終端配置上反復(fù)折騰大半天。提示符丑得不想多看一眼Git 分支顯示沒著落常用命令記一個忘一個寫過的腳本散落各處換臺機(jī)器就像重新失憶一次。后來痛定思痛干脆把手頭所有終端相關(guān)的配置、腳本、別名和工具統(tǒng)一收攏到一個開源倉庫里持續(xù)迭代了兩三個季度才慢慢定型成今天這套東西——OpenShell。OpenShell 本質(zhì)上是一套開箱即用的 Shell 工作流增強(qiáng)方案核心由模塊化的 dotfiles、自研 shell 函數(shù)庫、別名體系、提示符定制和安裝腳本共同組成。它面向的是像我一樣日常重度依賴命令行的開發(fā)者、運(yùn)維和數(shù)據(jù)分析師解決的是三件事新機(jī)器到手后環(huán)境一致性問題、高頻命令的記憶負(fù)擔(dān)問題、腳本和配置散落難復(fù)用的問題。這篇文章不打算講什么高深理論重點(diǎn)是把 OpenShell 從設(shè)計到落地的過程完整拆一遍需要的可以直接抄作業(yè)想改進(jìn)的也知道從哪個口子下手。1. 為什么會有 OpenShell一個終端重度用戶的自我救贖如果你只是偶爾用一下終端可能體會不到配置文件失控有多痛苦。我過去幾年的真實狀態(tài)是~/.bashrc越寫越長光是 alias 就有兩百多行中間還夾雜著不知道誰寫的亂七八糟的函數(shù)。某次手滑刪了一個環(huán)境變量排查了兩小時才意識到是幾周前臨時加進(jìn)去的。更煩人的是換了臺新 Mac從 iCloud 拉回配置之后有一半腳本因為路徑不對直接罷工最后只能默默掏出備份文件夾里的舊配置一點(diǎn)一點(diǎn)比對。OpenShell 最初的動機(jī)特別樸素我想給這些文件一個“正規(guī)編制”。它們應(yīng)該有明確的目錄歸屬、命名規(guī)范、加載順序而不是全部堆在一個文件里。后來逐漸演變成一個小型工程化項目——有安裝器、有卸載器、有模塊化組織方式、有跨平臺適配配置也能像代碼一樣放進(jìn) Git 倉庫里做版本管理。這樣做的好處是肉眼可見的新機(jī)器跑一次安裝腳本就能恢復(fù)熟悉的終端環(huán)境所有變更都有 commit 記錄改壞了隨時回滾再也不怕“改完不知道哪里出問題”的尷尬場面。另一個讓我下決心重構(gòu)的原因是團(tuán)隊協(xié)作。之前新同學(xué)入職光是把開發(fā)環(huán)境調(diào)好就要花半天因為大家各自維護(hù)一套配置甚至不同人的快捷鍵都不一樣。OpenShell 做出來之后至少我們小團(tuán)隊可以共用一套基線配置部分敏感內(nèi)容單獨(dú)拆出去其他公共配置大家保持一致學(xué)習(xí)成本明顯降了下來。當(dāng)然這只是額外的收益第一優(yōu)先還是解決自己的痛點(diǎn)。這個項目真正有價值的點(diǎn)不是某個單個 hack 技巧而是把零散的終端配置當(dāng)做一個軟件系統(tǒng)來治理的思維方式。很多人的配置亂不是因為命令不熟而是因為從來沒人告訴過他們 dotfiles 也可以像代碼倉庫一樣做分層、做封裝、做回歸測試。2. 模塊化設(shè)計核心思路不是炫技是活得久2.1 目錄結(jié)構(gòu)約定大于配置OpenShell 的倉庫目錄是這樣組織的openshell/ ├── bin/ # 可執(zhí)行腳本統(tǒng)一放進(jìn) PATH │ ├── git-ignore-clean │ ├── session-init │ └── ... ├── aliases/ # 按領(lǐng)域拆分的別名文件 │ ├── common.alias │ ├── git.alias │ ├── docker.alias │ └── ... ├── functions/ # 函數(shù)庫按功能域拆分 │ ├── fs.sh # 文件系統(tǒng)相關(guān)函數(shù) │ ├── net.sh # 網(wǎng)絡(luò)相關(guān)函數(shù) │ ├── git.sh # Git 輔助函數(shù) │ └── ... ├── prompt/ # 提示符相關(guān) │ ├── base.prompt │ └── theme-dark.prompt ├── rc/ # 各 Shell 的入口文件模板 │ ├── bashrc.tpl │ └── zshrc.tpl ├── install.sh ├── uninstall.sh └── README.md每個文件只干一件事。aliases/common.alias里只放通用的簡化命令aliases/git.alias放 Git 相關(guān)縮寫functions/net.sh只出現(xiàn)網(wǎng)絡(luò)操作函數(shù)。這樣有幾個明顯好處定位問題快如果某個函數(shù)報錯直接grep -r 函數(shù)名 functions/就能找到它在哪個文件裁剪功能簡單不需要哪塊直接刪除對應(yīng)文件即可多人協(xié)作時的沖突面大幅縮小你改你的 Git 增強(qiáng)模塊我改我的文件管理函數(shù)。入口文件本身也被標(biāo)準(zhǔn)化了。OpenShell 在安裝時會生成一個非常干凈的~/.bashrc里面只保留加載器和少量不可避免的本地配置。看到真實文件長這樣# 由 OpenShell 生成的入口不要手動編輯 export OPENSH_HOME${HOME}/.openshell if [ -f ${OPENSH_HOME}/init.sh ]; then source ${OPENSH_HOME}/init.sh fiinit.sh會根據(jù)當(dāng)前 Shell 類型、平臺類型和啟用的模塊動態(tài)加載對應(yīng)的文件。這樣比在~/.bashrc里寫一大堆source清爽得多。2.2 為什么堅持純 Shell 方案而不是搬來一個重量級框架很多朋友會問現(xiàn)在不是有 Oh My Zsh、Starship、zap 之類的現(xiàn)成方案嗎為什么還要自己造輪子我的答案很直接大部分框架解決的是“好看”和“社區(qū)生態(tài)”而我更在意“可預(yù)期”和“零依賴”。Oh My Zsh 功能確實強(qiáng)大但插件一多啟動時間成倍增長而且升級框架偶爾會導(dǎo)致自定義配置被覆蓋。Starship 渲染效果很驚艷但它是一個獨(dú)立的二進(jìn)制程序需要額外安裝、額外維護(hù)版本在某些內(nèi)網(wǎng)環(huán)境下部署成本還不低。OpenShell 的設(shè)計原則是盡可能只用 bash/zsh 原生能力不做任何外部二進(jìn)制依賴。這樣一來任何帶標(biāo)準(zhǔn) Shell 的 Linux 或 macOS 機(jī)器都能無縫拉起環(huán)境不需要訪問外網(wǎng)安裝額外軟件也不存在“框架升級后插件 API 變了”的兼容性問題。當(dāng)然我也不是完全排斥框架。如果你喜歡 Zsh 的補(bǔ)全體驗完全可以把 OpenShell 當(dāng)作一層基礎(chǔ)配置在其之上再套一個輕量級 Zsh 插件管理器。OpenShell 預(yù)留了zshrc.tpl模板插件初始化部分放在配置最后所以兩者不沖突。我個人的測試環(huán)境里就同時跑著 OpenShell 和兩個 Zsh 插件互不干擾。2.3 加載順序與防重復(fù)機(jī)制配置類項目最容易翻車的就是加載順序。OpenShell 的加載順序經(jīng)過了多次踩坑后固定為四個階段環(huán)境變量 - 函數(shù)庫 - 別名 - 提示符環(huán)境變量必須最先加載因為后面的函數(shù)和別名實現(xiàn)可能會依賴它們。函數(shù)庫在別名之前加載也很講究Shell 函數(shù)和別名不同函數(shù)可以調(diào)用其他函數(shù)而別名只在交互式 Shell 中展開。把函數(shù)庫全部 source 完之后再定義別名可以避免“別名展開時機(jī)不對導(dǎo)致函數(shù)引用失敗”的隱蔽 bug。防重復(fù)加載的機(jī)制我寫進(jìn)了init.sh沒什么魔法就是一個全局標(biāo)記變量if [ -n ${__OPENSH_LOADED__} ]; then return 0 fi export __OPENSH_LOADED__yes這個寫法的好處是即使你手動多 source 幾次init.sh環(huán)境也不會被二次污染函數(shù)定義不會重復(fù)PATH 不會累積。這個細(xì)節(jié)對那種“在.bashrc里又source ~/.openshell/openshell.sh又source ~/.bashrc的遞歸場景”特別重要。3. 核心細(xì)節(jié)解析真正提效的往往都是小東西3.1 別小看別名設(shè)計把優(yōu)先級最高的命令語義化很多人的 alias 設(shè)計純粹看手指爽度比如把g定義為git看起來敲起來方便但一個月后自己都忘了g是什么。OpenShell 的原則是語義優(yōu)先長度其次。別名至少要能讓你在三個月后看到它時不需要查文檔也能猜出大概意思。我摘錄了aliases/common.alias和aliases/git.alias中的幾個示例# 常用目錄操作 alias ..cd .. alias ...cd ../.. alias ..2cd ../.. alias ..3cd ../../.. # 資源查看 alias topcpups aux --sort-%cpu | head -20 alias topmemps aux --sort-%mem | head -20 # Git 高頻操作 alias gstgit status --short alias glggit log --oneline --graph --decorate alias gbrgit branch --format%(refname:short) %(committerdate:relative) | sort -r alias gcleangit branch --merged | grep -v \*\|main\|master | xargs git branch -d 2/dev/null || true這里我想特別解釋一下gclean這個別名。很多人的 Git 分支清理命令要敲五六個單詞每次還要小心翼翼防止誤刪主分支。這個別名把“列出已合并分支、排除當(dāng)前分支和主分支、刪除它們、忽略錯誤”整套邏輯封裝起來并且因為末尾帶|| true即使一個分支都刪不掉也不會讓腳本縮在非零退出碼上屬于可以放心執(zhí)行的“安全清理”。設(shè)計別名的核心原則是如果這個別名要加注釋才能解釋清楚那它就該變成一個函數(shù)而不是別名。3.2 函數(shù)庫的打開方式請至少擁有這幾個萬能函數(shù)別名解決的是快速輸入問題真正復(fù)雜的邏輯還是要靠函數(shù)。OpenShell 的functions/fs.sh里有兩個我每天都離不開的函數(shù)代碼都不長但實用度極高。第一個是mkcd創(chuàng)建目錄并立即進(jìn)入# 創(chuàng)建多級目錄并進(jìn)入 mkcd() { if [ $# -ne 1 ]; then echo usage: mkcd directory 2 return 1 fi mkdir -p $1 cd $1 }這里有幾個細(xì)節(jié)值得注意。第一入?yún)?shù)量檢查在業(yè)界實踐中經(jīng)常被忽略但如果沒有這個檢查手滑執(zhí)行mkcd不帶參數(shù)會直接出錯且輸出難看第二 2把錯誤信息重定向到標(biāo)準(zhǔn)錯誤輸出這樣才能在管道和腳本里正確暴露問題第三用連接兩個命令一旦mkdir失敗就不會進(jìn)入目錄避免“不知道自己在哪”的迷惑狀態(tài)。第二個是extract根據(jù)文件擴(kuò)展名自動調(diào)用相應(yīng)解壓工具# 解壓常見歸檔文件不用記參數(shù) extract() { if [ $# -ne 1 ]; then echo usage: extract archive 2 return 1 fi case $1 in *.tar.gz|*.tgz) tar -xzf $1 ;; *.tar.bz2|*.tbz2) tar -xjf $1 ;; *.tar.xz|*.txz) tar -xJf $1 ;; *.zip) unzip $1 ;; *.7z) 7z x $1 ;; *.rar) unrar x $1 ;; *) echo unsupported archive format: $1 2; return 1 ;; esac }這個函數(shù)的價值不是省幾個字母而是免去了每天去 Stack Overflow 搜“怎么解壓 tar.xz”的時間損耗。函數(shù)內(nèi)部分支清晰不認(rèn)識的格式直接報錯不會瞎猜。OpenShell 管道里的函數(shù)都遵循同一個規(guī)范參數(shù)檢查放最前面錯誤信息走2返回碼非零表示失敗。這個規(guī)范讓所有函數(shù)用起來的手感和系統(tǒng)自帶命令高度一致你在腳本里if mkcd /tmp/test; then也會得到合理的結(jié)果。3.3 提示符定制在一個字符里藏下你想看的信息提示符是最容易“過度設(shè)計”的部分。有些人弄出三行式甚至四行式提示符信息確實全了但整個終端屏幕都變得臃腫。我的主張是單行提示符只放必須信息其他交給顏色區(qū)分。當(dāng)前目錄、Git 分支、上一條命令執(zhí)行結(jié)果這三個信息在大多數(shù)場景下已經(jīng)夠用了。OpenShell 的默認(rèn)主題大概長這樣PS1\[\e[38;5;39m\]\u\[\e[0m\]\[\e[38;5;111m\]\h\[\e[0m\]:\[\e[38;5;76m\]\w\[\e[0m\]$(parse_git_branch)\[\e[0m\] \$ 其中parse_git_branch是一個比較高效的 Git 分支提取函數(shù)parse_git_branch() { git branch --show-current 2/dev/null | sed s/^/ (/ | sed s/$/) / }git branch --show-current是 Git 2.22 之后才有的命令老版本可能不支持所以在函數(shù)里加了標(biāo)準(zhǔn)錯誤重定向避免在非 Git 倉庫里輸出一堆噪音。如果你用的是__git_ps1那套方案OpenShell 也支持切換只要在prompt/目錄里新增一個主題文件并修改軟鏈接即可。顏色轉(zhuǎn)義建議統(tǒng)一用\[\e[38;5;XXXm\]這種 256 色調(diào)色板格式而不是傳統(tǒng) 16 色。因為 256 色在各種終端軟件里的顯示一致性要好很多不會出現(xiàn)同一個提示符在 iTerm 和 GNOME Terminal 里看起來像兩個主題的情況。3.4 歷史記錄與補(bǔ)全提升回憶效率的小配置Shell 歷史記錄是很多人忽視的寶藏。OpenShell 的rc/bashrc.tpl里有一段配置這次全貼出來export HISTCONTROLignoredups:ignorespace export HISTSIZE100000 export HISTFILESIZE200000 shopt -s histappend shopt -s cmdhist export HISTTIMEFORMAT%F %T histappend讓每個終端在退出時把新增歷史追加到文件而不是覆蓋多終端并行再也不怕互相把對方歷史沖掉HISTTIMEFORMAT給每條歷史加上時間戳回查“我昨天下午跑過什么命令”這種問題變得非常輕松ignoredups可以自動過濾連續(xù)重復(fù)命令避免歷史文件里全是ls、cd、pwd。補(bǔ)全方面我并沒有引入特別重的框架。Bash 5.0 以上自帶complete -o default已經(jīng)能覆蓋絕大多數(shù)場景你只需要確保下面這行被加載complete -o default -o bashdefault對 Git 這類多子命令的工具有條件的補(bǔ)全腳本可以設(shè)置懶加載首次執(zhí)行g(shù)it時才加載它的補(bǔ)全腳本而不是在 shell 啟動時就全量加載。這個技巧可以明顯降低啟動延遲后面會單獨(dú)聊。4. 安裝與配置實操一鍵腳本背后的工程化思維4.1 安裝腳本設(shè)計從裸機(jī)到可用只需要一分鐘OpenShell 的安裝腳本本身寫了接近兩百行核心是“冪等”和“可逆”兩個原則。所謂冪等就是反復(fù)執(zhí)行安裝不會破壞現(xiàn)有狀態(tài)所謂可逆就是任何情況下都能一鍵恢復(fù)到安裝前的樣子。先看整段安裝流程的骨架版本#!/usr/bin/env bash set -euo pipefail OPENSH_REPO_URLhttps://github.com/yourname/openshell.git OPENSH_DIR${HOME}/.openshell BACKUP_DIR${HOME}/openshell-backup-$(date %Y%m%d-%H%M%S) if [ ! -d ${OPENSH_DIR} ]; then git clone ${OPENSH_REPO_URL} ${OPENSH_DIR} fi # 備份已有配置 for f in .bashrc .bash_profile .zshrc; do if [ -f ${HOME}/${f} ]; then mkdir -p ${BACKUP_DIR} cp -L ${HOME}/${f} ${BACKUP_DIR}/${f}.bak fi done # 創(chuàng)建入口軟鏈接 ln -sf ${OPENSH_DIR}/rc/bashrc.tpl ${HOME}/.bashrc ln -sf ${OPENSH_DIR}/rc/zshrc.tpl ${HOME}/.zshrc echo OpenShell installed. Current backup: ${BACKUP_DIR}有人會質(zhì)疑把用戶的.bashrc整個替換掉是不是太暴力了這里的設(shè)計哲學(xué)是OpenShell 接管入口文件但把用戶原本的內(nèi)容原樣備份到一個帶時間戳的目錄里。這樣一來原本的配置并沒有刪除只是暫時“退居二線”。如果你有其他必須要保留的機(jī)器專屬配置可以在~/.bashrc生成的入口文件里顯式 source 一個~/.user-env文件這個文件 OpenShell 不會去碰給你留了后門。另外set -euo pipefail這一行極其重要。set -e讓腳本在遇到未捕獲錯誤時立即退出set -u能讓未定義變量直接報錯pipefail讓管道中任何一個環(huán)節(jié)出錯都會被發(fā)現(xiàn)。沒有這三件套安裝腳本很容易出現(xiàn)“表面成功、實際失敗”的假象。4.2 跨平臺適配macOS 與 Linux 的細(xì)節(jié)差異OpenShell 在 macOS 和主流 Linux 發(fā)行版之間做了一層薄薄的適配層全放在init.sh開頭。核心邏輯是這樣case $(uname -s) in Linux*) OPENSH_PLATFORMlinux ;; Darwin*) OPENSH_PLATFORMmacos ;; *) OPENSH_PLATFORMunknown ;; esac平臺判斷只是第一步真正容易出坑的是底層細(xì)節(jié)差異。比如 macOS 自帶的 Bash 是 3.2 版本很多在 Linux 上正常運(yùn)行的語法在 macOS 上直接跑不通。數(shù)組特性、${var//foo/bar}替換語法、部分正則表達(dá)式的行為都不一樣。所以 OpenShell 的多數(shù)函數(shù)嚴(yán)格限制語法在 Bash 3.2 范圍內(nèi)。如果你非要用一些新版 Bash 才有的特性那就得在函數(shù)入口顯式判斷版本并輸出友好提示而不是讓用戶看到一堆“Bad substitution”。另一個坑是sed -i。macOS 的sed -i必須要帶一個備份后綴參數(shù)Linux 的 GNU sed 則可以不帶。OpenShell 內(nèi)部盡量避免用sed -i而是用sed regex file tmp mv tmp file這種先輸出到臨時文件再替換的方式順便解決了平臺差異。路徑讀取也要小心。readlink在 macOS 上默認(rèn)沒有-f選項所以解析軟鏈接時要么用perl -e use Cwd abs_path; print abs_path($ARGV[0])要么安裝coreutils之后使用greadlink。OpenShell 的策略是盡量避免讀取軟鏈接絕對路徑而是直接用環(huán)境變量傳遞路徑繞開這個兼容性大坑。4.3 驗證與卸載建立優(yōu)雅的退出路徑安裝了之后怎么確認(rèn)一切正常OpenShell 自帶了一個自檢命令認(rèn)真寫了一些測試邏輯openshell_doctor() { local failures0 for cmd in git mkdir tar unzip; do if ! command -v $cmd /dev/null 21; then echo missing dependency: $cmd 2 failures$((failures 1)) fi done if [ -z ${OPENSH_HOME:-} ]; then echo OPENSH_HOME is not set 2 failures$((failures 1)) fi if ! declare -F mkcd /dev/null 21; then echo function mkcd not loaded 2 failures$((failures 1)) fi if git branch --show-current /dev/null 21; then : fi if [ $failures -eq 0 ]; then echo OpenShell health check passed. else echo OpenShell health check failed with $failures error(s). 2 fi }自檢腳本不檢查運(yùn)行結(jié)果的對錯只檢查加載狀態(tài)和依賴庫存不存在。這個功能特別適合“某某同事說裝了 OpenShell 但好像沒生效”的排查現(xiàn)場跑一下openshell_doctor就能定位八成問題。卸載腳本的要點(diǎn)是恢復(fù)備份。它會找到最近的備份目錄把.bashrc、.zshrc等文件原樣復(fù)制回去然后刪除軟鏈接最后再刪掉 OpenShell 主目錄。整個過程不會刪除任何用戶數(shù)據(jù)只移除自己曾經(jīng)創(chuàng)建的痕跡。這個“給人退路”的設(shè)計讓更多人愿意嘗試反正隨時能回到原狀態(tài)不需要破釜沉舟。5. 常見問題與排查技巧實錄5.1 啟動時報錯用證據(jù)鏈代替瞎猜大多數(shù) shell 配置問題都能靠固定的排查鏈路解決。我自己的啟動排查順序是先看有沒有明確的報錯再用bash -x跟蹤輸出最后用type -a和declare -F檢查加載狀態(tài)。舉個例子有用戶反饋在 macOS 上執(zhí)行 OpenShell 里的某個函數(shù)直接報Bad substitution。當(dāng)時我和他離線溝通了很久最后才意識到問題出在 macOS 默認(rèn)的 Bash 3.2 上函數(shù)里用了一個 Bash 4.0 才支持的${var,,}語法。解決辦法也很簡單把那段語法重寫成兼容模式或者在該函數(shù)開頭加一層版本判斷。還有一個常見報錯是PS1: unbound variable。這個通常在set -u開啟時出現(xiàn)因為腳本里某個變量在賦值前就被 PS1 引用了。OpenShell 后來在所有環(huán)境變量讀取時都改成${VAR:-}的默認(rèn)值安全寫法這算是一條鐵律在 shell 腳本中使用未定義變量時永遠(yuǎn)要有默認(rèn)值降級方案。類似經(jīng)驗經(jīng)常出現(xiàn)在社區(qū)討論里但真正能堅持寫進(jìn)每個文件的不多。這里整理一個簡易排查速查表類似問題都可以對照著看現(xiàn)象常見原因處理方式command not found: mkcd函數(shù)文件未被加載或加載順序問題執(zhí)行declare -F mkcd檢查確認(rèn)functions/fs.sh被 sourceBad substitution使用了當(dāng)前 Shell 版本不支持的語法bash -c echo ${BASH_VERSION}查看版本改用兼容寫法PS1: unbound variable變量被使用但未顯式初始化修改為${VAR:-default}的寫法提示符出現(xiàn)\[字符不生效PS1 中的顏色轉(zhuǎn)義沒有正確包裹確認(rèn)非打印字符用\[和\]包裹啟動速度明顯變慢.bashrc中有網(wǎng)絡(luò)請求或大型框架加載用time bash -lc exit測量把耗時模塊改為懶加載5.2 函數(shù)、別名與外部命令的糾纏關(guān)系Shell 的加載機(jī)制里有個反直覺的點(diǎn)別名不會在非交互式 Shell 中展開而函數(shù)可以。所以如果 OpenShell 里有幾個腳本打算在cron或 CI 里復(fù)用必須保證腳本內(nèi)部調(diào)用的是函數(shù)而不是別名。這是一個很隱蔽的坑曾經(jīng)有過用戶寫了一個名為ll的函數(shù)結(jié)果在腳本里怎么調(diào)用都沒反應(yīng)最后發(fā)現(xiàn)是別名優(yōu)先級比函數(shù)高系統(tǒng)先展開成ls -lh了。解決別名和函數(shù)沖突的辦法是在函數(shù)內(nèi)部使用\命令或者在定義函數(shù)前先unalias一下。OpenShell 的init.sh在加載 aliases 文件之前會把所有高頻別名統(tǒng)一 unalias 一輪這樣函數(shù)定義不會像一個“被覆蓋的變量”一樣被別名劫持。雖然這種防御性寫法看起來有些繁瑣但實戰(zhàn)中真的能幫你省掉很多莫名其妙的調(diào)試時間。5.3 啟動速度優(yōu)化別讓配置變成負(fù)擔(dān)我在 OpenShell 里面刻意避免在啟動階段做重量級操作。最常見的影響啟動速度的元兇有三個nvm、pyenv、gvm之類的環(huán)境管理工具初始化腳本它們每次都要遍歷目錄、檢查版本其次是通過網(wǎng)絡(luò)請求遠(yuǎn)程獲取提示符信息的操作最后是大型補(bǔ)全腳本的顯式加載。OpenShell 的推薦做法是給這類工具寫一個懶加載包裝函數(shù)。以 nvm 為例nvm() { unset -f nvm export NVM_DIR$HOME/.nvm [ -s $NVM_DIR/nvm.sh ] \. $NVM_DIR/nvm.sh nvm $ } node() { unset -f node export NVM_DIR$HOME/.nvm [ -s $NVM_DIR/nvm.sh ] \. $NVM_DIR/nvm.sh node $ }第一次執(zhí)行 nvm 或者 node 時才真正加載 nvm.sh后續(xù)調(diào)用走的是已經(jīng)加載好的真實命令不會陷入遞歸。這個模式通用性強(qiáng)pyenv、sdkman 都適用。用手表實測同一個終端從啟動到可用加載耗時從原來的 420 毫秒降到了 130 毫秒左右對感知提升非常明顯。6. 這套方案還能怎么玩從個人效率到團(tuán)隊規(guī)范6.1 定制屬于自己的模塊OpenShell 的模塊化結(jié)構(gòu)意味著你可以只挑選自己需要的部分。不喜歡默認(rèn)提示符就換prompt/目錄下的另一個主題文件覺得 Git 模塊的函數(shù)不夠就在functions/git.sh里追加新函數(shù)然后提交到自己的 fork。每次改動都只影響一個文件不會牽一發(fā)而動全身。新增一個模塊大概只需要三步在對應(yīng)目錄創(chuàng)建新文件、在init.sh的加載清單里加一行、跑一次openshell_doctor驗證。把配置當(dāng)作代碼來維護(hù)意味著你也要習(xí)慣寫注釋。我寫函數(shù)時幾乎每個都帶了 usage 注釋哪怕只有自己用因為兩周后看代碼的“自己”就是一個陌生人。6.2 把 OpenShell 作為團(tuán)隊命令行基準(zhǔn)線如果你在一個小團(tuán)隊里統(tǒng)一命令行體驗帶來的收益會非常明顯。倉庫地址固定下來之后新入職的同事只需要按 README 里的一條命令安裝再用openshell_doctor自檢就能進(jìn)入跟老同事一致的開發(fā)環(huán)境。保障團(tuán)隊內(nèi)部所有命令輸出風(fēng)格一致代碼評審時看到大家貼出來的終端日志也能快速理解上下文。當(dāng)然團(tuán)隊落地時要注意隱私和個性化的邊界。每個人的賬號信息、機(jī)器專屬配置、內(nèi)部 token、代理配置都不應(yīng)該進(jìn)入公共倉庫。OpenShell 保留了~/.user-env這個入口個人差異化配置全部放在那里倉庫只承載公共基線。這樣既保證了統(tǒng)一性又照顧到必要的彈性。6.3 后續(xù)演進(jìn)這半年我還在繼續(xù)折騰什么OpenShell 的思路還可以延伸到更多地方。一方面我在嘗試為函數(shù)庫補(bǔ)充簡單的自測框架比如用assert_equals斷言某個函數(shù)的輸出至少把高頻函數(shù)的關(guān)鍵路徑覆蓋住避免改一個通用函數(shù)導(dǎo)致另一個模塊無聲出現(xiàn)回歸另一方面在做更細(xì)粒度的能力開關(guān)定義比如通過openshell enable git和openshell disable git這樣的方式來控制模塊加載替代目前直接編輯文件的做法。不過有一點(diǎn)我的原則始終沒變?nèi)魏文K都必須快速、可用、可移除。如果一個功能需要安裝超過一個外部依賴才能跑起來那它就應(yīng)該從核心倉庫里拆出去做成獨(dú)立項目而不是繼續(xù)膨脹在 OpenShell 里。正因為守著這條邊界OpenShell 才能一直保持開箱即用的狀態(tài)而不是變成一個新的“全家桶”。最后再分享一個小技巧吧。無論你最終用不用 OpenShell都應(yīng)該把自己當(dāng)前的 dotfiles 納入 Git 管理哪怕只是git init在你的 home 目錄或配置文件目錄里。每天做了一點(diǎn)小改動就提交一次習(xí)慣之后你對 shell 環(huán)境的掌控感會完全不一樣。我個人體會中最值錢的一句話是配置不是寫一次就完事的東西它是每天都會呼吸的活項目。隨時保持能跑、能回滾、能快速定位問題的狀態(tài)比單純追求“最終完整形態(tài)”重要得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月婷婷爱六月丁香色| 久久精品国产亚洲妲己影视| 国产成人资源| 午夜久久无码1000合集| 亚洲AV成人精品网站在AV| 国产第二页| av天天在线观看| 在线观看无码三级少妇| 天天看夜夜看日日干| 国产AB视频| 欧美国产日韩清纯唯美| 亚洲精品a人片在线观看视| 屁股久久久久久| 99re这里只有精品2| 久久99国产综合精品女同| 欧美日韩性爱无码| 天天狠操| 国产精品原创巨作?v网站| 欧美日韩色| 男人天堂无码| 搡老女人老91妇女熟女| 91欧美性| 午夜精品久久久久久久| 日韩精品大香蕉伊人在线| 韩国久久97| 亚洲中文字幕精品久久久久久直播| 亚洲欧美一区二区网址| 99无码狠狠久久| 国产91美女视频| 99精品综合久久久久五月天| 天堂精品| 天天干天天舔| 日韩中文字幕视频在线观看| 中国一区二区亚洲人妻| www久久久| 大香蕉婷婷| 91欧美偷拍| 久九九九九九九热| 在线 亚洲 网爆 自拍| 极品五月天噜噜| 黄色污污污污污污网站| 九九久久一区二区三区| 欧美综合色站| 屌妞视频久久久久久久久久久久| 中文字幕久久精品一区| 色天欧美| 久久久久久97| 手机在线免费看的av| 操屄日韩| 午夜偷拍久久熟女| 极品白嫩美女白浆成人福利在线看| 午夜福利精品| 另类小说五月天| 黄污污污污| 欧美在线伊人色| 中文字幕视频2区| 亚洲少妇色图自慰直播| 天天综合~91| 在线综合 亚洲 欧美中文字幕| 国产女同视频在线播放| 国产91久久九九免费精品无码| www…国产操逼| 91亚洲精品青草| 成人色女网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 热热色综合网| 亚洲欧美色图片| 国产9 9在线 | 亚洲| 91一区二区三区蜜桃| 国产精品高清2021在线| h无码动漫在线观看| 亚洲综合在线视频| 青青草伊人久久| 久久大精品乱码视频人妻熟女| 97欧美色综合| 免费a v| 免费超碰97在线观看| 激情啪啪拍91| 最新精品久久蜜桃| 国产91 丝袜在线播放00-百度| 亚洲天天综合| 一区二区三区机械有限公司| 天美欧美国产| 欧美综合网| 美女尤物人人操| 神马视频久久久久久| 久久久禁| 国产福利电影| 最新欧美色网| 亚洲女人毛茸茸91| 亚洲成aⅴ人片不卡无码| 夜夜影视四色| 99色日| 黄色成年| 亚洲熟女av日韩熟女| 欧美亚洲丝袜美女电影| 三级色影综合网| 久久av成人无码免费| 国产人妻精品久久久一区二区三区 | 蜜臀av一区二区三区免费观看| 中文字幕十五区| 人人操人人摸超碰| 国产AV高清AV无码| 少妇高潮喷水无套久久久久久| 日本成熟少妇A∨网站| 亚洲操人| 亚洲情色 自拍| 亚洲国产ⅴ高清在线观看| 欧美成人9797| 啊啊啊操死我| 亚洲老熟妇xxx| 欧美伦乱| 丁香五月激情五月| 亚洲91色| 丰满少妇一区二区三区四区观看 | 超碰在线看| 91美女視頻| 精品人妻1区| 二三四区精品| 性爱av网站| 久久偷偷色综合蜜桃| av在线播放国产一区| AV一二区| 脫衣舞一区二区三区| 亚洲综合99999| 日本成人在线不卡一区二区三区| 中文啪啪视频| 精品性爱| 天天碰操中国年青熟妇| 91丨豆花丨熟女| 欧美97视频| 天天色,天天干,天天干| 夜夜国自区| 人人插人人搞人人操| 亚洲男人天堂视频| 日日夜夜干| 久久久久久久97| 91美女在线精品视频| 国产熟女精品一区二区| 色婷婷一区二区三区久久午夜 | 长久操视频| 精品v日韩欧美国产| 久久天堂网| 国产精品老师| 欧亚日韩一区在线| 欧美熟女妇同| 免费AV播放| 91久久久亚洲| 黄色十八禁| 五月婷婷久久综合| 波多野结衣一级视频| 亚洲黄a三级三级三级看三级| 懂色AV蜜臀无码精品APP | 黑人黄片在线免费观看| 国产又粗又长视频| 国产精品一区二区后入| wwwss在线观看| 性综合网| 夜夜免费视频| 中文字幕日韩精品一区二区三区| 粉嫩不卡一区二区性爱| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 日韩成人性爱AV| 婷婷午夜| 亚洲本色精品一区二区久久| 综合色99| 草草草草视频| 久久亚州高清| 波多野结衣被操50分钟免费视频| 超碰69| 亚洲无码一二三区| 天天伊人| 精品无码一区二区人妻久久蜜桃| 亚洲精品一区二区三区在线播放| 欧美亚洲特P| 成人综合色网| 国产传媒操逼视频| 蜜臀va69| 久草精品国产蜜臀| 天天综合网站| 五月婷婷六月色| 东北操逼| 国产av强奸美女| 国产精品久久泡妞网站| 综合大香蕉美。| 日韩99神马视频播放| 亚洲 欧美综合| 日韩综合无码色欲vv| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 亚洲国产无码精品首页久久久| 久久久久久久综合,国产| AV九九| 午夜操逼不卡| 亚洲综合电影| 国产馆| 91激情国产| 欧美人妻色| 98一区二区精品| 亚洲精品乱码久久久久久蜜桃麻豆| 日本性感人妻91| 99av| 91n欧美| 日韩有码专区| 91狠狠综合久久| 天天综合91入口| 人人九九精| 色悠久久久av| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 欧美制服网站美腿丝袜| 五月天成人综合| 精品1区2区3区| 色综合久久av| 久热网| 亚州国产精品乱| 色呦呦、国产精品| 精品久久大胆人体| 亚洲黄色| 天天看高清麻豆| 曰本特级特黄特色黄色A级网站高清在线免费看 | 亚洲无码视频免费在线观看网址!| 旡码电影特区| 97视频900| 60秒免费小视频| 女人的天堂大香蕉网| 久草新免费| 99久在线精品99re8a| 国产超碰在线一区| 97精品国产手机| 欧美91精彩| 亚洲色图综合网| 性交一区二区在线播放| 精品少妇高潮久久| 久久区| 91性感在线| 日本一级真人黄色性爱视频| 蜜乳成人AV| av天堂精品久久| 91成人久久 | 亚洲清纯综合| 日韩欧美性吧婷婷乱伦大香蕉| 欧美性天天| 久草精品国产99| 久久亚洲欧美中文字幕国语| 丁香六月婷婷综合| 国产自产91区13区| 啊啊啊啊啊啊啊在线| 久久久久深夜无码| 亚洲欧美色图小说| 色一色综合网| 午夜激情床戏激情| 中文字幕一区二区三四五区日日骚| 日韩资源网| 97操碰| 亚洲啪啪综合?v一区综合精品区| 超碰 av 女人天堂| 久久中文字幕人妻熟av女蜜柚| 男女国产精品| 囯产操逼片| 中文字幕二区日韩天堂| 天天干夜夜| 翔田千里AV无码秘 三区| 在线A日本| 九九伊人网| 免费网站观看www在线观| 九九九九九九免费视频| 成人免费性爱视视| 一级黄色影片| 91亚.色| 国产精品亚洲无码| 欧美人妻色| 蜜臀视频网站| 可以免费观看的av| 亚洲成人AB| 亚洲h片在线免费观看| 日韩精品区二区三区不卡| 97操在线| 国产精品久久久久久久AV大片| 青青草操逼逼视频| 久久大香蕉97| 亚洲成熟国产精品美女| 欧美日本天堂| 免费的很黄很污的全部视频| 亚洲男人的天堂V| 欧美日韩人妻精品系列一区二区三区| 在线观看综合精品亚洲| 久久精品中文| 人妻22p| 龙兴卡官方查询| 伊人专区一区二区三区| 香蕉一区二区三区在线视频| 无码一区免费在线不卡| 日韩情色视频| 性爱动态120秒| 97ai亚洲| 99天堂网| 日本操逼无码| 91精品人妻一区二区三区蜜桃臀| 一级二级在线观看| 欧美黄色图片| 无码 黑人一区二区三区| 岛国小电影| 秋霞怕怕片| 高凊专区人人操| 天美精品原创av片国产| 婷婷精品国产一区二区三区日韩| 成人精品久久久午夜福利| 麻豆区99999| 69XX一中文字幕人妻91| 色婷婷淫色网| 久久久九九网站| 五月天AV资源| 嗯嗯啊在线视频| 国产白丝av| 75大香蕉| 天天躁日日躁AAA片李宗瑞| 天欧美在线| 亚洲综合九九| 国产女大学生AV| 欧美亚洲AN| 激情网色| 玖玖久久久| 99re这里只有精品3| 天天插夜夜操| 四虎影视国产精品| 91伊人影视综合| 日小BB小视频| 91制服丝袜| 嗯嗯嗯好爽| 天天综合影院91| 欧美日韩黄片精品在线| 久久久久久免费电影| 国产 码在线成人网站| 男人天堂网站| 99精品综合久久久久五月天| 精品久久久久9999| 日韩欧美俄罗斯A片| 全国男人天堂网| 超碰久久中文| 超碰成人最新最好看| 日本在线999| 欧美熟女激情| 防屏蔽在线视频| 91丨九色丨国产丨人妻在线| 无码精品啪啪啪一区二区三区三州| 激情久久久| 99国产精品视频尤物| 女人香蕉久久毛毛片精品| 九一屌逼| 久久久一级| 嗯啊抽插大香蕉网页| 欧美 亚洲 在线| 很很很很操| 久热伊人99re| 操逼日韩无码 | 精品久久在线区一区| 亚洲欧洲精品视频发布| 亚洲图片欧美色图| 中文字幕激情小说| 自拍啪啪视频| 亚州色图片在线色| 亚洲自拍另类丝袜综合| 欧美亚洲日韩人妻在线观看| 中文字幕 国产 精品| 26uuu国产亚洲综合| 青草精品视频一日本久久久久网站| 欧美少妇第一页| 首页亚洲国产高跟丝袜诱惑视频 | 欧美天堂日韩三级国产传媒| 国产精品天美传媒| 色噜噜婷婷| 在线国产福利网址导航| 日韩熟女操逼| 日本1区2区不卡视频| 精品人妻一区二区三区日产| 97在线播放 | av强奸乱轮| 超碰97人人cao| 立川理惠被中出无码| www.91视频网| 亚洲小说视频| 综合亚洲欧美| 亚洲自拍97| 欧美亚洲首页| 熟妇色99| 国产精品96| 伊人操| 九九热av| 另类欧美色| 97亚洲在线| 天天综合网在线91| 激情小说在线视频| 国产成人无码a| 欧美日韩免费性爱| 操逼操逼逼操操逼91| 亚洲第一狼人丝袜美女另类| 国产精品久久久久久久黄无码| 日韩激情毛片一级久久久| 黄色人人| 日韩去日本高清在| 99热这里只有精品8| 开心婷婷五月| 国产精品视频电影| 一区| 国内成人圈中文字幕无码视频 | 亚洲欧美国产其他二区| 九九热最新| 天美av在线观看| 97久久超碰国产网站| 91性高| 碰超人人在线一区二区三区| 99热线麻豆| 91爱| 精品国产一区二区三区香蕉欧美| 久久毛卡| 日韩精品.久久精品.AV女优.天美传媒| 美女刺激久久国产欧美| 国产精品久久久蜜臀| 麻豆伊人网| 91精品国产91久久久久久久久久久久| 91丝袜在线观看| 日韩成人精品| 欧美黄色片AAAAA| 欧美1727免费观看视频| 亚洲精品 欧美精品| 5252色欧美在线男人的天堂| 亚洲欧美日韩偷拍色图| 国产AV久久野战精品| 国产做?爰片久久毛片?片美国| 无码9区| 1024手机看片欧美日韩| 天天天肏屄肏屄肏屄欧美欧美| 97碰| 九月丁香| julia中文字幕在线观看| 99re6在线视频播放免费精品| 97 色综合| 亚洲少妇综合在线播放| 久久欧洲| 日本综合色图| 九九色精品| 成人久久精品| av影片在线观看不卡| 日韩精品黄片免费观看| 色诱avtt| 91在线视频国产网站| 久久久久国产精品喷潮免费观看臀| 国产综合久久久麻桃个| 久久久久久亚洲中文| 欧美综合站| 久久精品一区二区三区蜜桃臀| 欧美组图日韩亚洲中文字幕| 激情五月综合网| 亚洲超碰综合网| 国产第12页| 欧美激情总合网| 国产乱码久久久| 999亚洲国产视频| 国产精品对白内射| 啪啪视频免费在线观看| 丝袜美腿诱惑亚洲欧美视频在线观看| 欧美丰满少妇交换91欧美精品| 午夜福利1区2区3区| 欧美日韩高潮喷水91| 夜夜夜爽www精品视频| 国产网站在线播放| 久操视频免费观看| www.99中文字幕| 欧美97日韩| 99久国产精品午夜性色福利| 99抽插| 国产黄色在线播放观看| 丰满搜索结果 -第18页- 久久高清无码 | 丁香色狠狠色综合久久小说| 熟妇在线视频一区二区| 日韩小电影| 日本九九九九| 中日韓欧美高清| 丁香五月综合| 超碰在线一区二区| 97色插| 91啦人妻| 伊人少妇久久久| 亚洲精品中文字幕一区在线视频 | 亚洲91在线播放影院| 日韩久草| 精品免费成人久久| 精品久久99| 97久久久久| 国产精品久久久亚洲一区| 超碰午夜| 小骚逼被操的爽不爽| 色综合av男人天堂| 精品一级| 91中文精品日韩欧美在线| 99在线免费公开视频| 无码人妻系列少妇| 天天爽天天爽| 国产女同视频在线播放| 日韩欧美~中文字| 蜜桃久久综合视频| 国产一级高跟丝袜| 国产9熟妇视频网站| 五月黑AⅤ| 国产精品 久久久精品一牛| 九九九九免费视频| 精品久久久九九九孕妇| 一级片在线观看高清无码| 五月天人妻综合| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 日本九九久久99播| 无码高清专| 一区二区不卡视| 久草草一二三四区久久| 亚洲天堂中文字幕无码男同| 亚洲无线码欧洲精品区别| 4tube欧美女厕所| 嗯……啊…嗯嗯…啊…好舒服| 中文字幕亚洲永久精品| 91亚洲欧美| 欧美女同在线| 成人精品一区二区三区| 精品亚洲国产成人AV制服丝袜| 超碰99在线观看| 色路综合| 内射黑丝袜| 久久人妻97久久久久久久| 岛国黄色短视频| 综合 亚洲 欧美| 操少妞在线视频| 亚洲不卡不卡中文字幕不卡| 色小视频蜜乳| 狠狠色噜噜狠狠狠狠狠色综合久久| 国产97视频| 一二三四视频在线社区中文字幕| 午夜大香蕉| 欧美激情性久久久久久| 嗯嗯啊啊好爽| 欧美黑人与女人91| 夜夜嗨老熟女AV一区二区三区| 国产熟女少妇一区| 五月天社区| 国产女乱淫真高清免费视频| 日韩av无码网站| 97 国产精品| 97色欧州| 色女综合| 青青国产精品在线| 操B在线观看| 亚洲 日本 国产 综合| 97超碰欧美精品| 亚州,欧美在线| 人人搡人人肉久久精品| 人妻在线臀日韩| 99热超碰| 大香蕉宗合网在线| 精品性爱| 狠狠色伊人亚洲综合网站色| 中文字幕第2页| 亚洲黄色电影| 欧美日本不卡在线| 怡红院亚洲怡春院av| 超碰一区二区| 九九九九免费高| 97九色人妻| 精品国产乱码久久久久久久久1| 成人福利视频网| 国产超碰人人爽人人做| 岛国视频免费在线观看| 最新亚洲人成网站在线影院| 欧美黄片免费在线观看视频| 成人精品久久久午夜福利| 成人午夜高潮av猛片| 丰满熟女一区二区三区在线播放| 色爱天堂| 男啪女色黄无遮挡免费观看| 9999久久久| 91精品国产长腿丝袜美女| 国产青青综合伊人| 一区二区三区麻豆| 立川理惠被中出无码| 激情熟女12P| 国产精品96| 国产兽交视频在线播放| 中文日本免费高清| www狠狠| 男人兔费天堂| 97欧美精品综合| 狠色婷婷久久一区二区三区_| 大香蕉青青9| 校园春色AV天堂| 麻豆天美91| 欧美大波激情xxxx| 亚洲精品日韩国产欧美| 色婷婷五月天| 亚洲视频一二区| 蜜桃狠狠色伊人亚洲综合| 少妇激情AV| 国产精品人妻无码久久久互動交流| 国产91福利小视频在线观看| 最新的亚洲无吗| 久久久成人国产精品无码| 草莓精品视频在线免费观看| japan日本高清乱xxxx| 国产精品嫩草影院免费| 91国产精品熟女| 久久99精品国产| 午夜一区| 鸡巴插逼视频| 天堂岛av| 久久久久网站-538在线视频-欧美永久乱码 | 草草影院日本第一页| 国产精品成人在线| 快点操死我| 色网1| 久久久999| 精品性爱一二三区| 欧美日韩性爱精品| 五月开心久久AV官网| 精品天堂| 黄色高清无码无码破解免费暗网| 亚洲 欧美 91| 日日摸日日弄日日拍| 久久超碰国产一区二区三区| 日韩性爱视频免费在线 | 国产97在线播放| 嫩呦国产一区二区三区AV| 色999五月色| 亚州色图欧美| 五月天我淫我色av| 亚洲宅男天堂| 欧美欧美少妇| 最近的最新的中文字幕视频| 日日夜夜干| 天天干人妻视频| 人人妻人射| 欧美国产有色电影| 精品一级毛片在线观看| 蜜桃久久综合视频| 婷婷激情五月综合| 九色精品视频导航1| 亚洲棕合电彰| 久久老熟女| 日本午夜精品理论片A级APP发布| 97色妞| 亚洲国产精品成人久久蜜臀| 亚欧成人综合影院| 中文字幕88av在线| 男插女青青影院| 中文字幕在线观看AV| 美女高潮国产高清| 久热久| 国产精选视频| 99九九久久| 欧美天堂在线| 日本免费中文一区二区三区四区 | 欧美性爱免费短视频| 欧美超碰9798| 人人人摸人人| 九九英色视频| 少妇一区二区三区高速| 五毛骚逼极品美女怕怕| 99国产在线 精品 视频| 欧美色图在线视频少妇| 国产树林里野战在线看| 殴美色网| 日本久久网| 亚洲黄色AV电影| 在线女人91| 欧美一区二区男人天堂| 中文字幕免费观看| 精品中文字幕第一页| 欧美一二级| 欧亚在线视频| 久久久九九| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 亚洲 欧美 综合 91| 啪一啪免费视频| 国产激情在线| 婷婷三区| 变态乱伦伪娘灌肠一区二区| 久久久三区二区一区| 狠狠干,狠狠操| 欧美日韩在线视频网站| 啊啊啊啊啊好大好舒服想要| 久久精品亚洲成a人天堂| 四虎精品永久在线观看| 激情久久av一区av二区av| 亚洲精品九九九| 五月婷婷hd| 91在线无码精品秘 软件| 99999久久精| 欧美日韩精品国产91| 中文一区在线视频| 91精品国产91久久青草| 91美女色视频亚洲| 国产又色又爽又舒服的三级视频| 日韩欧美日韩| 精品国产久久乱码| 99热97| 久久av成人无码免费| 一区二区视频在看| 丝袜视频一区二区在线播放国产中文| 伊人99热| 超碰无码加勒比| 精品美女少妇一区二区| 精品9区| 天天看片天天爽| 日本一区二区成人在线| 国产亚洲99久久精品熟| 精品制服美女中文一区二区三区| 狠狠干狠狠干| 91精品无码人妻系列| 亚洲男人天堂网| 精品视频一区二区| 操B久久| 国产熟女少妇一区| 91社区拍啪人妻| 日本人妻中文字幕| 91欧美经典| 免费视频观看60秒| 香蕉免费一区二区三区不读| 性欧美另类高清| 色色色五月婷婷| 黄骗免费| 亚洲第一黄色av网站| 看全色黄大色大片免费视频| 蜜汁欧美| www.av不卡中文字幕| 91性高| 九久久九精品视频| 一区二区三区 丝袜 高跟 美腿| 国产成人亚洲精品无码古代早漏男| 亚洲av性爱电影| 少妇天堂| 久久国产精品m码| 美女上床网站| 成人情色综合网| 色欧洲97| 女人18精品一区二区三区| 国产丰满少妇久久久精品影院| xxx亚洲午夜天堂| 亚洲 综合 欧美| 久久久com| 日本综合色图| 欧美 亚洲 偷拍自拍| 精品一二三区久久AAA片| 久久riav中文精品| 亚洲色色探花| 中文字幕亚洲永久精品| 乱伦Av网| AV污污污污| 五月天玖玖资源站| av天堂5| 久99热| 色5月婷婷| 亚洲天堂综合AV| 久操大香蕉手机视频在线看| 九九热免费国产视频婷婷伊人五月 | 黄呦呦在线| 日日日骚女人精品| 亚洲色悠悠久久88| 国产青青综合伊人| 91四海无码日韩欧美| 91色婷婷综合久久中文字幕二区| 超碰诱惑| 日韩欧美大片免费高清啪啪| 国产在线能看的你懂的| 一区操逼日比视频| 国产一区二区在线电影| 丁香六月婷婷久久综合| 日韩三级一区| 美女91在线观看| 我中文字幕6区| 国产又大又粗又长视频在线| 欧美夜夜骑视频| 蜜桃狠狠色伊人亚洲综合 | 国产av美女被艹的乱叫| 大香蕉丝袜一级片| 嗯嗯啊中文字幕| 伦在线97| 日韩精品亚洲一二三| 人妻天天爽天天爽三区| 26uuu偷拍亚洲欧洲综合| 免费av大片| 蜜臀久久99精品久久综合| 草久久久| 青青草原成人| 精品欧美老熟女一二区| 91精品久久久久五月天精品 | 韩日欧亚a级| 日产欧美电影一区二区三区| 久久一区二区高清免费| 亚洲有码 欧美精品| 日韩超碰精品综合| 国产sv美女内射| 性videos欧美熟妇hdx| 国产免费久久久久| 97资源超碰| 国产黑白丝在线| 高清有码一区二区| 国产成人+综合亚洲+天堂| ,国产乱人伦精品一区二区三区| 97精品97久久| 91亚洲人| 超碰九色| 欧美日韩亚洲五月天婷婷| 97爱亚洲| 日韩欧美亚洲一区二区三区影院| 色婷婷蜜臀av| 久久9久久| 国产一级作爱毛片| 国产精品乱人伊人网| 欧美亚洲天天| 四虎影视永久在线免费| 色诱中文字幕| 天天综合中文字幕 91| 在线观看黄色电话| 亚洲激情天堂网| 少妇厨房愉情理伦片bd在线观看| 久久久精品国产亚洲AV无码| 任你干在线视频| 欧美自拍偷拍综合图片| 色女女女导航| 天躁夜夜躁2021| 日韩中文字幕视频在线观看| 吉田爱美AV在线| 女人天堂av在线播放| 中字乱伦AV| 干美女人妻| 懂色天天爱天天日天天射天天澡| 成人天天看站长推荐| 啊啊啊啊操死我| 九九Av| 欧美第五页| 天天看,天天做| 美熟女逼导航AV操逼| 中文字幕奈奈美被公侵犯| 欧美精品另类人妖xxxx| 玖玖爱影院| 丰满人妻-区二区三区免费| 天堂网亚洲区手机版| 亚欧高清在线| yazhououmeizongya| 美国aaaaa一级黄片| 精品久久9| 欧美日韩国产高清在线一二三区 | 99国产精品久久久久久久成人热| 国内外内射高清视频| 99这里有精品| 91爱网| 91视频观看网站| 探花精品 一区二区| 日本三级人妻a人妻一在线| 综合久久97| 91国产大片| 三级色综合| 久草毛片| 亚洲色久| 中文操逼字幕| 国产熟女| 色色色色网站| 国产又粗又长的视频| 天天添天天干电影| 97超碰欧美| 超碰天天操| 91人妻人人澡人人爽人人精品| 久久精品老司| 精品区国产区一区二区三区| 欧美第五页| 青娱乐av在线| 26uuu性物| 日本幼女18+| 日本三级久| 欧美性爱91| 夜夜高潮夜夜爽国产伦精品| 另类图片五月| 国产男女边吃边摸视频网站| 四虎在线观看网站| 97碰在线视频| 欧美高清91| 一道本东京热加勒比一区二区三区 | 十八禁视频网站| 五月天伊人网| 亚洲色悠悠久久88| 国产丝袜视频| 91社操逼| 日本不卡五区| 亚洲资源网| 99re6久热只有精品6在线直播| 翔田千里无码一区| 色97欧美| 日本三级人妻a人妻一在线| 黄色网址在线免费观看| 一区二区视频在看| 91无摭挡| 另类在线| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国产毛片片精品天天看视频| 天美传媒av一区二区| 国产这里只有精品| 乱伦AVxx| 国产毛片片精品天天看视频| 精品熟妇视频一区二区| 中文字幕丝袜美腿| 日日日日日| 久操网视频| 日韩偷拍一区二区三区| 91性网| 久色99999| 精品十三区| AA丁香综合激情| 激情视屏国产乱伦强奸| 操逼A∨| 国产精品乱码久久| 久久精品成人一区二区三区蜜臀| 综合网欧| 国产精选三级在线观看| 盗摄女人妻在线| 欧美午夜视频免费观看| 成人久久久| 一二三区精品视频| 久久精品国产精品| 一区二区三区四区久久视1| 婷婷久久综合久| 日本在线播放不卡一区| 国产成人欧美精品在线| 91精品国产综合久久久蜜臀酒店| 插插综合网天天影视网| 色www精品视频在线观看| 操人妻逼91| 1024亚洲中文字幕久在线看片你懂的 | 国产精品懂色tv影视免费观看| 综合网亚洲在线| 97伊人超碰| 欧美性生活内射| 999 久久久| 色九九综合AV| 97频视在线| 欧洲亚洲人人爽爽视频| 超碰天天操你比| 青青欧美| 国产一区二区三区,在线观看观看| 一区二区三区 丝袜高跟| 国产乱人妻精品入口| 久久綜合很很很| 偷拍综合亚洲| 久久 久久国内精品亚洲 | 国产一级作爱毛片| 日本性爱少妇| 一区二区三区免费岛国片| 亚洲成人av电影在线| 最新日产中文在线麻豆| 欧美视频一区二区在线| 国产在线视视频有精品| 男人的天堂一区三区| 99自拍视频在线| 99国产精品人妻人伦| 日本天天吊| 欧美一区二区三区大综合| 国产农村妇女精品一| 国产青青美女玩逼视频| 欧亚成人在线视频| 色九色久| 国产视频人人网| 亚洲国产成人精品久久久国产成人一区二区 | 91老熟女视频| 亚洲男人久久综合天堂| a天堂视频| 国产亚洲综合欧美一区| 青青草在线成人视频| 中文字幕av久久爽Av| 久草线上视频免费看| 情色五月天网| 久久久久女教师免费一区 | 久久国产乱子伦精品免费女,网站| www.夜夜| 人妻熟女字幕一区二区| 国产五码丝袜屁眼| 国产精品久久久久999| 欧美高清第一页| 91在线视频免费播放| www…国产操逼| 嗯~啊~快点 死我视频| 金典av| 91色香| 98人妻精品一区二区色欲| 囯产操逼片| 超碰性爱97| 91成人亚洲色图| 国产精品麻豆成人av| 欧美日韩亚洲一区二区在线观看| 九热视频| 99久热精品99re6热| 综合亚洲网| 亚洲成人日韩小说| 97色在线| 蜜臀th| 激情 欧美 亚洲 小说| 操逼网站视频漫画国产| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 亚洲精品久| 91亚洲狠狠色| 国产无码三级视频在线观看| 色婷婷狠狠18禁| 久久久免费懂色| 欧美第一页| 色婷婷综合网站| 91网站18在线| 思思久热在线精品66| 亚洲一区中文字幕一区| 久久偷拍人| 一区二区乱码福利| 国产精品亚洲免费| 欧美激色| 日本 色 导航| 青青青操| 久久69| 亚洲国产精品99久久久| 天天干天天日天天射黄色| 国产激情在线| 亚洲五码一区二区三区| 国产25页| 日本一区二区三区午夜观看| 九九久久精品| 久久久久久久久女黄| 亚洲色色探花| 色妇91| 国产精品欧美日韩久久| 一区二区三区男女操逼黄色小电影| 一起草视频在线| 熟女视频久久| 国产蜜臀精品一区二区尤物| 日韩AV熟女乱伦| 国产成人精品午夜福利| 日韩色欲久久一二三四区| 久神马| 亚洲阿v天堂无码z2018| 国产精品欧美激在线| 久久久久久久免费A片国产成a人亚洲精∨品无码| 久热久| 久久久人妻| 25国产精品免费观看| 亚洲高清欧美总合| 三级片网站在线播放| 综合性视频99| 国产福利第一视频| 日韩欧美久久婷婷网站| 超碰人人干| 激情欧美97| 久久香蕉国产传媒一区剧情天美| 免费国产视频| 大香蕉婷婷| 91 丝袜在线播放| 91人妻视频在线| 中国操逼无码| 亚州欧美一区| 综合色图区| 91色亚洲| 亚洲丝袜天堂| 免费伦费视频在线观看| 91无码人妻| 99这里有精品视频| а√天堂资源官网在线资源| 亚洲码和欧洲精品激情系列| 人妻一二三区| 亚洲系列欧美| 熟妇在线视频一区二区| 翔田千里A片一区二区| 亚州色图狠狠干| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 久日91在线| 岛国片在线观看视频亚洲| 久久久久国色αv免费观看| 久久国色天香香蕉| 久久久久久日韩| 亚洲日韩97| 嗯嗯嗯嗯啊啊啊好紧好大| 久9无限国产| 自拍盗摄一区| 中文字幕 国产 精品| 日本天天干天天操一区| 亚洲AV不卡在线观看尤物| 日本污ww视频网站| 人妻一区二区三区熟女| 牛牛久久国产精品视频一二三| 九九aV| 日本爽爽爽爽爽爽免费视频| 亚洲大色鬼| 国产精品乱人伊人网| 91深夜夜| …亚洲黄色厕厕女女在线播…| 蜜臀久久在线视频| 黄片在线免费在线观看| jizz啪啪| 国语精品av| 1二区9| 天天综合在线4| 高跟丝袜AV专区国产| 大香蕉狠狠爱| 97视频在线视频| 尤物av网站| 熟女被操视频网址| 国产成人无码a| 国产精品操| 超碰免费欧美7| 九九英色视频| 精品国产乱码久久久久久久久1 | 97草草| 亚洲五区熟女| 欧美99热| 亚洲少妇综合在线播放| 中文AV制服乱伦| 激情婷婷黑人91| 中文一区在线日| 91麻豆天美国产| 99视频在线| 一区三区啪啪| 久久东京伊人一本到鬼色| 一二三四日本视频高清| 亚洲色图日韩精品| 亚洲图片激情综合另类| 九久9精品| www男人天堂| 91熟女视频网| 久久精9| 2019天天操天天爽天天拍| 99久久综合| 久久大香蕉97| 爱丝福利| 亚洲综合在线高清| 亚洲欧美精品一区天堂久久 | 天天干1区2区在线| 日韩久久艹| 91美女视屏| 国内精品999| 亚洲影视综合网| 综合色色网| 婷婷在线精品| 久久99综合| 久久久免费一级黄片| 亚洲成熟国产精品美女| 午夜爽爽爽在线观看永久入口姬片| 蜜臀无码视频在线观看| 国产深夜福利| 啪啪综合网| 日本97久久| 欧美日综合| 91欧美综合| 亚洲精品久久久久毛片A片拉屎| 精品少妇99| 久久尹人大香焦视| 久九色| 少妇熟女一区二区三区| 野狼福利社区| 日韩精品资源专区二区| 91狠狠| 熟妇xxxxx性春色| 在线一道啪| 国产最火爆久久国产网站网站| 精品人妻1区|