亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

zenity實戰(zhàn)指南:給Linux shell腳本添加圖形對話框

zenity實戰(zhàn)指南:給Linux shell腳本添加圖形對話框 寫過 Linux 運(yùn)維腳本的朋友應(yīng)該都遇到過這種尷尬腳本跑得飛起可一旦需要用戶輸入路徑、確認(rèn)操作、選個日期就只能干巴巴地在終端里read -p 請輸入...用戶輸錯一個字符就得重來要是把腳本丟給不懂命令行的同事用那更是災(zāi)難現(xiàn)場。zenity 這個命令就是來解決這件事的——它讓你在 shell 腳本里直接調(diào)出 GTK 圖形對話框信息提示、文件選擇、進(jìn)度條、表單填寫全部用標(biāo)準(zhǔn)命令行參數(shù)搞定不寫一行 GTK 代碼。這篇東西我會把 zenity 的常用對話框、關(guān)鍵參數(shù)、實戰(zhàn)腳本和踩坑記錄完整過一遍適合正在寫運(yùn)維腳本、自動化工具或者單純想讓自己的腳本看起來更專業(yè)的 Linux 用戶。1. zenity 是什么在終端腳本里畫出圖形界面1.1 為什么腳本需要圖形對話框很多人有一個誤區(qū)命令行工具就該老老實實待在終端里要圖形界面為什么不直接寫個 GTK 程序但現(xiàn)實情況是大部分自動化腳本只需要一兩個交互點(diǎn)比如選擇要備份的目錄、確認(rèn)是否刪除舊日志、展示處理結(jié)果。為了這幾個交互去寫完整 GUI 程序要處理窗口生命周期、信號回調(diào)、布局管理工作量完全不成比例。zenity 填補(bǔ)的就是這個空隙它像一個對話框工廠你給它幾個命令行參數(shù)它就按參數(shù)生成對應(yīng)的 GTK 窗口然后把用戶的選擇通過標(biāo)準(zhǔn)輸出傳回腳本。舉個例子沒有 zenity 的時候讓用戶輸入一個文件路徑你得寫echo 請輸入文件路徑: read FILE_PATH用戶一旦輸錯路徑整個腳本邏輯就要圍繞錯誤處理打轉(zhuǎn)。用 zenity 一行搞定FILE_PATH$(zenity --file-selection --title請選擇文件)zenity 會彈出原生的 GTK 文件選擇器用戶用圖形界面瀏覽、點(diǎn)選選好之后路徑直接賦值給變量。這體驗差距是質(zhì)變級的尤其當(dāng)腳本的使用者不熟悉命令行時。1.2 zenity 的工作原理命令行參數(shù)到 GTK 窗口的映射zenity 本質(zhì)上是一個瘦封裝程序底層調(diào)用的是 GTK 庫的對話框 API。你敲下的--info、--question這些參數(shù)對應(yīng)著 GTK 里不同類型的對話框組件--text參數(shù)對應(yīng)窗口里的文本標(biāo)簽--button對應(yīng)窗口底部的按鈕。zenity 把這些組件的創(chuàng)建、布局、事件循環(huán)全部包辦腳本只需要做兩件事啟動 zenity 進(jìn)程讀取它的退出碼和標(biāo)準(zhǔn)輸出。這里有一點(diǎn)值得展開說zenity 是阻塞式的。腳本執(zhí)行到zenity這一行時會暫停直到用戶在對話框中點(diǎn)擊按鈕或關(guān)閉窗口zenity 進(jìn)程退出后面的代碼才繼續(xù)跑。正是因為這種阻塞模型腳本可以用同步邏輯寫交互不需要搞異步、回調(diào)那一套。用戶點(diǎn)的按鈕決定了退出碼——一般0表示確認(rèn)/完成1表示取消/關(guān)閉配合if判斷就能接管用戶的所有選擇。1.3 安裝與基礎(chǔ)檢查zenity 是 GNOME 桌面環(huán)境的標(biāo)準(zhǔn)組件多數(shù)帶圖形界面的 Linux 發(fā)行版都預(yù)裝了。你可以先確認(rèn)一下which zenity zenity --version如果沒裝各發(fā)行版安裝方式如下發(fā)行版安裝命令Ubuntu / Debiansudo apt install zenityRHEL / CentOS / Fedorasudo dnf install zenity或sudo yum install zenityArch Linuxsudo pacman -S zenityopenSUSEsudo zypper install zenity裝好之后跑一個最簡單的命令驗證環(huán)境zenity --info --textHello, Zenity!屏幕上應(yīng)該會彈出一個標(biāo)題為信息的小窗口里面顯示一行文本。窗口出現(xiàn)的那一刻你已經(jīng)邁出第一步了。2. 六大基礎(chǔ)對話框日常需求全靠它們2.1 信息、警告、錯誤三種提示框--info、--warning、--error這三個是最簡單的對話框區(qū)別只在圖標(biāo)不同信息框是藍(lán)色感嘆號圖標(biāo)警告框是黃色三角圖標(biāo)錯誤框是紅色叉號圖標(biāo)。使用場景很明確——腳本完成了一個耗時任務(wù)彈個信息框通知用戶某個操作有副作用或風(fēng)險彈警告框讓用戶知情某一步執(zhí)行失敗彈錯誤框明確告知。zenity --info --title任務(wù)完成 --text日志清理完畢共釋放 1.2GB 磁盤空間。 --width320 zenity --warning --title磁盤空間不足 --text/home 分區(qū)剩余空間低于 10%建議立即清理。 zenity --error --title備份失敗 --text目標(biāo)磁盤寫入權(quán)限不足請檢查后重試。這三個對話框都支持--title設(shè)置窗口標(biāo)題、--text設(shè)置正文內(nèi)容、--width和--height控制窗口尺寸。實際寫腳本時我習(xí)慣把所有提示框的--title統(tǒng)一成腳本名這樣用戶看到彈窗就知道來源多腳本協(xié)作時尤其好使。值得注意的一個冷知識這三個對話框即使顯示的是錯誤用戶點(diǎn)擊確定后退出碼依然是0因為 zenity 認(rèn)為用戶成功看到了消息并且點(diǎn)了確定這件事本身是成功的。要拿到真正的錯誤狀態(tài)得靠腳本自己的邏輯去判斷不能依賴 zenity 的退出碼。2.2 詢問框用退出碼接管用戶選擇--question是腳本交互里最高頻的對話框。它只做一件事給用戶展示一個問題然后提供確定和取消兩個按鈕。用戶的選擇結(jié)果映射到退出碼0表示確定1表示取消。這讓腳本的流程控制變得非常直白if zenity --question --title確認(rèn)刪除 --text確定要刪除 /tmp/old_cache 目錄嗎此操作不可恢復(fù)。 --ok-label刪除 --cancel-label再想想 then rm -rf /tmp/old_cache zenity --info --text已刪除。 else zenity --info --text已取消操作。 fi--ok-label和--cancel-label這個參數(shù)極其實用它讓按鈕文字貼合業(yè)務(wù)場景降低誤操作概率。默認(rèn)的確定/取消太籠統(tǒng)用戶面對確定這兩個字時往往不知道確定的是什么。還有一個細(xì)節(jié)如果用戶直接按Esc鍵或點(diǎn)擊窗口右上角的關(guān)閉按鈕退出碼也是1。所以腳本邏輯里取消分支要覆蓋所有非確定的情況別假設(shè)用戶只會乖乖點(diǎn)按鈕。2.3 文本輸入框和密碼框收集用戶輸入--entry生成帶一個文本輸入框的對話框適用于需要用戶輸入一個值的場景比如輸入主機(jī)名、端口號、正則表達(dá)式。輸入的內(nèi)容通過標(biāo)準(zhǔn)輸出返回配合變量接收NEW_IP$(zenity --entry --title網(wǎng)絡(luò)配置 --text請輸入新的 IP 地址: --entry-text192.168.1.100)--entry-text參數(shù)可以預(yù)填一個默認(rèn)值這個細(xì)節(jié)在實際使用中能省不少事——大部分情況下用戶需要的只是一個微調(diào)預(yù)填好常見值用戶改一下就行比空輸入框友好得多。--password則是專用密碼輸入框輸入的內(nèi)容顯示為圓點(diǎn)。它在彈窗層面跟--entry最大的區(qū)別是回車鍵的行為不同。--password框在輸入密碼后按回車會直接確認(rèn)關(guān)閉而--entry框按回車只是換行。如果你的場景需要輸入后直接回車確認(rèn)這種流線型操作--password反而更合適。當(dāng)然從安全角度講zenity 的密碼框返回的密碼是明文輸出到標(biāo)準(zhǔn)輸出的腳本拿到后務(wù)必盡快使用并清理不要用echo打到日志里。3. 高級控件文件選擇、日期、列表與表單3.1 文件選擇對話框打開/保存都靠它--file-selection是 zenity 里功能最豐富的對話框它調(diào)起 GTK 的原生文件選擇器支持打開、保存兩種模式還能按擴(kuò)展名過濾文件?;A(chǔ)用法# 打開模式選擇一個已存在的文件 SRC_FILE$(zenity --file-selection --title選擇源文件) # 保存模式指定輸出文件路徑 SAVE_PATH$(zenity --file-selection --save --confirm-overwrite --title指定保存位置 --filenamebackup.tar.gz)--filename參數(shù)在保存模式下會預(yù)填一個默認(rèn)文件名在打開模式下則會預(yù)選目錄比如--filename/etc/會讓文件選擇器直接定位到/etc目錄省去用戶手動導(dǎo)航。文件過濾是--file-selection最容易被忽略但最實用的功能。當(dāng)你的腳本只處理特定類型的文件時用--file-filter限制可選擇的文件用戶根本看不到無關(guān)文件從源頭避免選錯CONFIG_FILE$(zenity --file-selection \ --title選擇配置文件 \ --file-filter配置文件 | *.conf *.ini *.yaml *.yml \ --file-filter所有文件 | *)--file-filter的參數(shù)格式是顯示名稱 | 匹配模式可以重復(fù)使用多次來支持多組過濾。這里有個坑GTK 文件選擇器的過濾條件在部分系統(tǒng)上對目錄不生效所以即使加了過濾用戶還是可能看到目錄。如果腳本必須保證拿到的是文件而非目錄最穩(wěn)妥的辦法是拿到結(jié)果后自己在腳本里加一層test -f判斷。另外文件路徑可能含空格接收變量后所有引用該變量的地方都要記得加引號這是 shell 腳本的基本素養(yǎng)但碰到文件選擇器時尤其容易翻車。3.2 日歷選擇拿到格式化日期腳本里需要用戶指定日期時讓用戶手輸日期的交互成本很高格式稍錯就會被date命令拒絕。--calendar彈出 GTK 日歷控件用戶直觀點(diǎn)選zenity 輸出固定格式Y(jié)YYY/MM/DD到標(biāo)準(zhǔn)輸出SELECTED_DATE$(zenity --calendar \ --title選擇計劃日期 \ --text點(diǎn)擊選擇日期: \ --day20 --month6 --year2025) echo 你選擇的日期是: $SELECTED_DATE--day、--month、--year三個參數(shù)用來設(shè)定日歷的初始日期默認(rèn)是今天。這個對話框的輸出格式是固定的拿到之后如果想轉(zhuǎn)成YYYY-MM-DD或時間戳直接用date命令轉(zhuǎn)換FORMATTED_DATE$(date -d $SELECTED_DATE %Y-%m-%d)我在實際使用中發(fā)現(xiàn)一個體驗上的問題--calendar沒有直接禁用過去日期的選項用戶完全可以選今天之前的日期。如果業(yè)務(wù)邏輯上要求日期必須晚于今天腳本要做二次校驗if [[ $SELECTED_DATE $(date %Y/%m/%d) ]]; then zenity --error --text日期不能早于今天。 exit 1 fi3.3 列表選擇在腳本里做下拉菜單--list生成一個帶多行列表的對話框用戶可以單選或復(fù)選。它接收一系列--column參數(shù)定義列后續(xù)按列填充數(shù)據(jù)SELECTED_SERVICE$(zenity --list \ --title服務(wù)管理 \ --text選擇要重啟的服務(wù): \ --column服務(wù)名稱 --column當(dāng)前狀態(tài) --column端口 \ nginx 運(yùn)行中 80 \ mysql 已停止 3306 \ redis 運(yùn)行中 6379 \ --width450 --height250)當(dāng)對話框只有一個列時用戶點(diǎn)擊的行內(nèi)容直接輸出有多個列時默認(rèn)輸出第一列的內(nèi)容。如果想拿到所有列需要加--print-column參數(shù)指定列號配合--separator指定分隔符SELECTED$(zenity --list \ --title選擇主機(jī) \ --columnIP --column主機(jī)名 \ 192.168.1.1 web-server \ 192.168.1.2 db-server \ --print-column1 --separator,)--list的默認(rèn)交互方式是單選雙擊選項或點(diǎn)擊確定都會返回選中項。加--multiple參數(shù)可以變?yōu)槎噙x模式此時選中多個行時輸出用換行符分隔腳本里處理時要注意用while read逐行讀取而不是簡單賦值給一個變量。3.4 表單與滑塊多字段輸入的進(jìn)階姿勢--forms是給需要一次輸入多個字段的場景準(zhǔn)備的。它能在同一個窗口里放四到五個輸入控件字段之間用--separator指定的字符分隔輸出FORM_RESULT$(zenity --forms \ --title添加用戶 \ --text填寫新用戶信息 \ --add-entry用戶名 \ --add-entry郵箱 \ --add-password初始密碼 \ --add-calendar入職日期 \ --separator,) IFS, read -r USER_NAME EMAIL INIT_PASSWORD JOIN_DATE $FORM_RESULT表單支持--add-entry文本框、--add-password密碼框、--add-calendar日期選擇、--add-combo下拉列表四種控件類型。字段值按順序拼接用--separator指定分隔符然后腳本用IFS加上read拆開。注意這里的一個坑如果某個字段的值本身包含了分隔符字符拆分就會錯亂。所以--separator要選一個輸入內(nèi)容里幾乎不可能出現(xiàn)的字符我習(xí)慣用|如果表單里有 URL 輸入就改用^^這種雙字符組合。--scale則適合需要用戶在數(shù)值范圍內(nèi)做選擇的場景它顯示一個可拖動的滑塊附帶一個數(shù)值標(biāo)簽CPU_LIMIT$(zenity --scale \ --title資源限制 \ --text設(shè)置 CPU 使用上限 \ --min-value1 --max-value100 --value50 --step5)--step參數(shù)控制滑塊拖動的最小步長數(shù)值越大越容易精確選到目標(biāo)值。讀取--scale的返回值時滑塊拖到最小值和用戶點(diǎn)取消都會返回1的退出碼但標(biāo)準(zhǔn)輸出不同判斷時要把退出碼和輸出值結(jié)合著看別把用戶設(shè)置了最小值誤認(rèn)為用戶取消了。4. 進(jìn)度條實戰(zhàn)讓腳本進(jìn)度看得見4.1 基本用法標(biāo)準(zhǔn)輸入喂百分比--progress是 zenity 里被問得最多的對話框原因在于它不像其他對話框那樣點(diǎn)一下就有結(jié)果而是需要你用管道持續(xù)喂數(shù)據(jù)很多第一次用的人會卡在這里。它的工作模式是這樣的你啟動zenity --progress它打開一個帶進(jìn)度條的窗口然后從標(biāo)準(zhǔn)輸入不斷讀取數(shù)據(jù)每讀到一行純數(shù)字就把進(jìn)度條更新為對應(yīng)百分比每讀到一行以#開頭的文本就更新窗口上的狀態(tài)文字。最小可用的進(jìn)度條腳本#!/bin/bash ( for i in $(seq 1 10); do echo $((i * 10)) echo # 處理到第 $i 步... sleep 1 done ) | zenity --progress --title處理中 --percentage0 --auto-close這里我用了一個子 shell 把循環(huán)包起來整個子 shell 的標(biāo)準(zhǔn)輸出通過管道接到 zenity 的標(biāo)準(zhǔn)輸入。數(shù)字10、20、30這種更新進(jìn)度# 處理到第 N 步更新文字。--auto-close參數(shù)是進(jìn)度到 100% 時自動關(guān)閉窗口不加的話即使進(jìn)度到了 100% 窗口也一直掛著等用戶手動點(diǎn)掉。4.2 三個高頻參數(shù)--auto-close、--auto-kill、--pulsate--auto-close上面說了進(jìn)度到 100% 自動關(guān)窗。--auto-kill則比較特殊——當(dāng) zenity 窗口被用戶手動關(guān)閉時對應(yīng)管道上游的所有進(jìn)程會被一并殺掉。沒有這個參數(shù)的話用戶在進(jìn)度條中途關(guān)了窗口后臺的數(shù)據(jù)生成進(jìn)程還會一直跑。對于循環(huán)處理、拷貝這類后臺任務(wù)--auto-kill可以有效防止僵尸后臺任務(wù)但也要謹(jǐn)慎用如果上游執(zhí)行的是不可中斷的危險操作比如正在寫數(shù)據(jù)庫務(wù)必留個確認(rèn)步驟別讓用戶隨手一關(guān)就把任務(wù)腰斬了。--pulsate是另一個常用參數(shù)進(jìn)度條不按百分比更新而是一直反復(fù)滾動表示正在工作中但無法預(yù)估剩余時間。典型的場景是網(wǎng)絡(luò)下載、等待某個外部服務(wù)響應(yīng)。它的語法很簡潔( sleep 10 ) | zenity --progress --pulsate --title請稍候 --text正在等待服務(wù)響應(yīng)...用了--pulsate之后管道里喂的數(shù)字會被忽略進(jìn)度條永遠(yuǎn)在動但位置不固定用戶一看就知道程序沒死只是在等。4.3 實戰(zhàn)tar 備份腳本帶實時進(jìn)度現(xiàn)在寫一個真正有用的把指定目錄打包成 tar.gz同時用進(jìn)度條展示進(jìn)度。這里有個現(xiàn)實問題——tar 本身不輸出百分比它只會一行一行地列出正在處理的文件名。最實用的辦法是用 tar 的--checkpoint參數(shù)配合--checkpoint-action輸出處理進(jìn)度再用 awk 轉(zhuǎn)成百分比:#!/bin/bash SRC_DIR/var/www/html BACKUP_NAMEbackup_$(date %Y%m%d_%H%M%S).tar.gz TOTAL_SIZE$(du -sb $SRC_DIR | awk {print $1}) ( tar -czf /tmp/$BACKUP_NAME --checkpoint1 --checkpoint-actionecho $SRC_DIR 21 | awk {print NR} ) | zenity --progress --title備份進(jìn)行中 --text正在打包 $SRC_DIR ... --percentage0 --auto-close思路是--checkpoint-actionecho讓 tar 每處理一塊數(shù)據(jù)就向 stderr 輸出一行信息21把 stderr 并入 stdout管道傳給 awkawk 用NR統(tǒng)計行號逐步把行號輸出為進(jìn)度值。嚴(yán)格說這個百分比跟真實的字節(jié)進(jìn)度不完全線性但對普通用戶展示在動、快好了已經(jīng)足夠。要更精確可以預(yù)計算文件總數(shù)在 awk 里用總行數(shù)做比例換算寫法更復(fù)雜但更準(zhǔn)確。4.4 進(jìn)度條不更新的坑與解法進(jìn)度條最常見的坑是卡在一個百分比不動到任務(wù)結(jié)束才突然跳到 100%。原因通常是管道緩沖——echo的數(shù)據(jù)被標(biāo)準(zhǔn)庫緩沖住了沒有實時流向 zenity。解決手段有兩個第一給管道上游加stdbuf -oL強(qiáng)制行緩沖( stdbuf -oL tar czf archive.tar.gz $SRC_DIR --checkpoint1000 --checkpoint-actionecho 21 ) | ...第二改用文件描述符喂數(shù)據(jù)不經(jīng)過管道緩沖。具體操作是用文件描述符 3 寫入進(jìn)度數(shù)據(jù)同時把 stdout 留給其他用途#!/bin/bash ( # 開啟文件描述符 3連接到 zenity 的 stdin exec 3 (zenity --progress --title下載 --text下載中... --percentage0 --auto-close) for i in {1..5}; do echo $((i * 20)) 3 sleep 1 done exec 3- )這個寫法繞開了管道緩沖進(jìn)度數(shù)據(jù)每次都立刻到達(dá) zenity。代價是文件描述符的概念對大部分 shell 初學(xué)者不友好所以我的建議是優(yōu)先用stdbuf解決不了再上文件描述符。5. 組合實戰(zhàn)把 zenity 嵌進(jìn)自己的工作流5.1 交互循環(huán)把腳本做成向?qū)浇缑鎲蝹€對話框只能做一次交互但真正的工具往往需要連續(xù)多次問答。用while循環(huán)把多個 zenity 對話框串起來就能做出一個簡單的向?qū)匠绦?。核心思路是每個對話框的退出碼和返回值都進(jìn)入循環(huán)判斷用戶點(diǎn)取消就退出循環(huán)點(diǎn)確定就執(zhí)行下一步。#!/bin/bash while true; do ACTION$(zenity --list \ --title系統(tǒng)維護(hù)工具箱 \ --text選擇一個操作: \ --column操作 --column說明 \ 清理日志 清理 /var/log 下超過 30 天的日志 \ 備份配置 將 /etc 下關(guān)鍵配置打包到 /backup \ 磁盤分析 查看 /home 目錄的磁盤占用 \ --print-column1 --width480 --height320) if [ $? -eq 1 ]; then break # 用戶取消退出循環(huán) fi case $ACTION in 清理日志) # 執(zhí)行清理邏輯 zenity --info --text日志清理已完成。 ;; 備份配置) # 執(zhí)行備份邏輯 zenity --info --text配置備份已完成。 ;; 磁盤分析) # 執(zhí)行磁盤分析邏輯 zenity --info --text分析報告已生成。 ;; *) break ;; esac done這種模式把一堆零散的運(yùn)維命令包成一個可視化菜單使用者不用記命令、不用記參數(shù)點(diǎn)點(diǎn)鼠標(biāo)就能完成操作。我在給團(tuán)隊內(nèi)部工具做封裝時就沿著這個思路走把日常巡檢、日志清理、配置備份這些操作全部收斂到一個腳本里通過 zenity 菜單逐層展開可維護(hù)性比想象中好很多。5.2 綜合案例一鍵備份引導(dǎo)工具把前面講的功能串起來做一個完整的工具。這個腳本做了三件事讓用戶選備份源目錄、讓用戶選保存位置、用進(jìn)度條展示備份進(jìn)度#!/bin/bash set -e # 第一步選擇源目錄 SRC_DIR$(zenity --file-selection --directory --title選擇要備份的目錄) [ $? -eq 0 ] || { zenity --info --text已取消。; exit 0; } # 第二步指定備份文件保存路徑 DEST_FILE$(zenity --file-selection --save --confirm-overwrite \ --title選擇備份保存位置 \ --filename$HOME/backup_$(date %Y%m%d).tar.gz) [ $? -eq 0 ] || { zenity --info --text已取消。; exit 0; } # 第三步執(zhí)行備份并顯示進(jìn)度 ( echo 10; echo # 正在計算目錄大小... tar czf $DEST_FILE $SRC_DIR --checkpoint100 --checkpoint-actionecho 21 | sed s/.*// # 用文件大小換算進(jìn)度的簡化版本 ... ) | zenity --progress --title備份執(zhí)行中 --percentage0 --auto-close --auto-kill zenity --info --title完成 --text備份完成\n保存位置: $DEST_FILE這里要注意--file-selection --directory這個組合加上--directory參數(shù)后文件選擇器只允許選擇目錄非常適合選擇要備份的目錄這種場景。5.3 結(jié)合 gsettings 做圖形化配置zenity 不只可以跟 shell 組合還可以配合gsettings工具把 GNOME 系統(tǒng)設(shè)置的變更做成圖形化配置面板。比如寫一個簡單的腳本用--list顯示桌面選項用戶點(diǎn)選后腳本自動執(zhí)行對應(yīng)的gsettings set命令。這種做法非常適合給同事提供一套安全的圖形化系統(tǒng)調(diào)整工具避免他們直接去翻 dconf 數(shù)據(jù)庫。原理相通你可以在自己的桌面環(huán)境中嘗試類似的組合思路比工具本身更有價值。6. 運(yùn)行環(huán)境與常見問題排查6.1 遠(yuǎn)程 SSH 彈不出窗口這是 zenity 新手最常踩的坑。你 SSH 登錄到一臺服務(wù)器敲了zenity --info結(jié)果終端報錯(zenity:12345): Gtk-WARNING **: cannot open display:原因很簡單zenity 需要圖形顯示環(huán)境而 SSH 會話默認(rèn)不帶 DISPLAY 環(huán)境變量。處理方式有四種第一如果遠(yuǎn)程機(jī)器有物理顯示器且你登錄的是本機(jī)桌面會話可以手動指定 DISPLAYexport DISPLAY:0 zenity --info --text正常顯示第二通過 SSH 的 X11 轉(zhuǎn)發(fā)把窗口拉到本地顯示ssh -X userserver # 或 -Y 參數(shù)不安全的 X 轉(zhuǎn)發(fā)但兼容性更好 # 這要求本地有 X 服務(wù)Windows 用戶需要先跑一個 X Server第三使用xhost授權(quán)后用export DISPLAY本機(jī)IP:0.0直接指向本地 X 服務(wù)。第四壓根不要用 zenity —— 如果操作對象是無圖形界面的服務(wù)器用whiptail或dialog這類文本界面工具更合適。6.2 cron 環(huán)境下為什么不行cron 任務(wù)里調(diào) zenity 十有八九會失敗原因有兩個cron 環(huán)境沒有 DISPLAY 變量cron 進(jìn)程也不屬于任何圖形會話缺少訪問 X server 的必要授權(quán)。即使你強(qiáng)行在 crontab 里寫DISPLAY:0大多數(shù)情況下仍然會因為 Xauthority 權(quán)限問題報錯。我的建議是cron 任務(wù)里不要用圖形提醒改用wall命令廣播消息、用mail發(fā)郵件、或者配合 notify-send 在特定桌面會話里發(fā)通知。如果某個任務(wù)確實需要用戶確認(rèn)更合理的做法是讓 cron 把待確認(rèn)事項寫到一個隊列文件登錄時由交互腳本讀取并彈窗處理——把生成問題和展示問題拆成兩個角色。6.3 返回值讀不到怎么辦zenity 的退出碼本身沒問題但腳本里讀不到返回值通常出在管道上??催@個例子zenity --question --text繼續(xù)嗎 | tee response.txt echo $? # 這里輸出的是 tee 的退出碼不是 zenity 的管道會讓$?變成最后一個命令的退出碼zenity 的退出碼被吞掉了。解決辦法是使用PIPESTATUS數(shù)組zenity --question --text繼續(xù)嗎 | tee response.txt echo ${PIPESTATUS[0]} # 取第一個命令zenity的退出碼或者改寫為不使用管道的形式先把 zenity 輸出存到變量再處理OUTPUT$(zenity --question --text繼續(xù)嗎) RETVAL$?第二條路清晰得多也少踩坑。輸出值本身也有個常見問題當(dāng) zenity 對話框取消時標(biāo)準(zhǔn)輸出通常是空的如果能區(qū)分用戶沒輸入和輸入了空字符串腳本邏輯會更健壯。比如檢查退出碼之后再判斷變量是否為空字符串。6.4 中文顯示亂碼與字體問題zenity 的文本顯示依賴系統(tǒng)字體和 locale 配置。最常見的問題是中文顯示為方塊或問號一般原因是系統(tǒng)缺少中文字體# Ubuntu / Debian sudo apt install fonts-noto-cjk # RHEL / Fedora sudo dnf install google-noto-sans-cjk-fonts裝好字體后重新運(yùn)行腳本基本就能正常顯示。另一個坑是腳本文件本身的編碼問題——如果你在 Windows 上編輯腳本再傳到 Linux文件可能是 GBK 或帶 BOM 的 UTF-8zenity 會原樣輸出亂碼。統(tǒng)一用 UTF-8 無 BOM 編碼寫腳本能省掉大量莫名其妙的顯示問題。還有一個細(xì)節(jié)--text參數(shù)里用\n換行在部分版本上不生效需要man zenity確認(rèn)版本特性或者直接使用$...語法寫多行文本zenity --info --text$第一行\(zhòng)n第二行6.5 對話框尺寸與布局的邊角問題--width和--height不是所有對話框類型都嚴(yán)格生效。比如--info這類簡單提示框GTK 會根據(jù)文本長度自動調(diào)整窗口大小你設(shè)的--width可能只是參考值。要強(qiáng)制固定大小可以配合--no-wrap參數(shù)但這可能讓長文本被截斷。在實際項目中我一般不對提示框強(qiáng)設(shè)尺寸而是控制文本長度——文本太長既影響觀感又容易觸發(fā)布局 bug列表和表單這類復(fù)雜對話框--width和--height反而很有用設(shè)置大了能避免內(nèi)容被壓縮得難以閱讀。6.6 調(diào)試技巧排錯的三板斧真遇到 zenity 行為異常時不要瞎猜按下面三步來第一在命令行直接跑一次不帶管道、不帶變量接收的原始命令觀察輸出和退出碼zenity --list --columna --columnb 1 2 echo exit code: $?第二加上--debug參數(shù)。部分 zenity 版本支持--debug會輸出更多診斷信息到 stderr不支持就手動在腳本里加set -x看腳本實際執(zhí)行了哪條命令。第三把 zenity 的輸出重定向到文件而不是變量排查輸出里有字但腳本拿不到的問題zenity --list --columna 1 /tmp/zenity_output.txt cat /tmp/zenity_output.txt cat -A /tmp/zenity_output.txt # 查看是否有多余的空白字符或換行cat -A能顯示出行尾的回車符和制表符很多變量值對不上的詭異問題都是被這種隱形字符坑的。7. 腳本開發(fā)的幾個通用建議zenity 本身很簡單真正影響腳本質(zhì)量的是一些通用的工程習(xí)慣。這里把我實際項目中沉淀的經(jīng)驗集中說一下。第一給所有 zenity 調(diào)用預(yù)設(shè)統(tǒng)一的--title。我習(xí)慣在腳本開頭定義一個APP_TITLE變量所有對話框的 title 都引用它。彈窗來源一目了然多個腳本同時運(yùn)行時用戶也不會混淆。第二用戶取消操作時靜默退出比報錯退出更好。腳本里每個交互對話框之后都先檢查退出碼一旦為1就干凈退出不要繼續(xù)往后面執(zhí)行。否則用戶明明取消了腳本還往下跑很可能觸發(fā)一系列本不該發(fā)生的操作。第三輸出值一定要做合法性驗證。zenity 只負(fù)責(zé)把用戶的輸入原樣返回它完全不理解輸入內(nèi)容的含義。用戶可能選了空的文件路徑、輸入了帶特殊字符的文本、選擇了不存在的日期。拿到輸出后用test -f、test -d、date -d這些命令校驗一下比事后排查生產(chǎn)事故要劃算得多。第四文件路徑處理統(tǒng)一使用雙引號。這個我已經(jīng)重復(fù)了多次但怎么強(qiáng)調(diào)都不過分。凡是通過 zenity 拿到的路徑要么賦給變量時整體加引號要么在使用處加引號稍一偷懶就會在含空格路徑上栽跟頭。第五zenity 的--timeout參數(shù)值得關(guān)注。部分對話框支持設(shè)置超時秒數(shù)超時后自動按取消處理。把--timeout加在提醒類對話框上可以避免腳本因為等用戶點(diǎn)擊而無限掛起。8. 從 zenity 延伸出去還有哪些選擇zenity 不是唯一的方案寫腳本時可以根據(jù)環(huán)境選更合適的工具我對它們的定位是這樣看的工具依賴庫界面形式適用場景zenityGTK圖形窗口GNOME 桌面環(huán)境、有 X/Wayland 顯示時kdialogQt圖形窗口KDE 桌面環(huán)境功能比 zenity 更豐富whiptailnewt文本界面純終端環(huán)境服務(wù)器 SSH 場景dialogncurses文本界面純終端環(huán)境控件比 whiptail 更全選擇標(biāo)準(zhǔn)很直白機(jī)器上有桌面環(huán)境就用 zenity 或 kdialog只有純字符終端就用 whiptail 或 dialog。如果你想寫一版腳本同時適配兩種環(huán)境可以在腳本開頭檢測環(huán)境變量DISPLAY是否存在動態(tài)選擇調(diào)用哪個工具。這種上層統(tǒng)一邏輯下層自動分流的做法在真實項目中非常實用。另外Python 環(huán)境更充裕的場景下PyGObject直接寫 GTK 對話框是更靈活的方案但學(xué)習(xí)成本和代碼量都會明顯上升。zenity 的價值恰恰在于一句話就能彈窗這個樸素能力對 90% 的腳本交互需求已經(jīng)夠了。我個人的體會是zenity 這類小工具最容易被忽視但它們解決的是腳本可用性的最后一公里。運(yùn)維腳本做得再專業(yè)、再健壯如果交互環(huán)節(jié)粗糙使用者依然會覺得這工具難用。給腳本加上幾個 zenity 對話框本質(zhì)上是在提升整個工具的用戶體驗——用戶不需要學(xué)習(xí)命令行參數(shù)不需要小心翼翼輸入路徑和日期只需在彈出的窗口里點(diǎn)選、確認(rèn)操作門檻一下子就降下來了。這個投入產(chǎn)出比我覺得是每個寫腳本的人都值得去算一筆的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久天堂| 日韩在线电影| 99av| 國產尤物AV尤物在線觀看 | 黄页网站成人免费| 91人人臊| 亚洲欧美啪啪| 在线v中文字幕一区二区三区| 禁止观看美女黄| 日韩欧美麻豆| 亚洲黄色网址视频| www. 男人天堂成人在线| 欧美狠狠干| 综合久| 国产成人精品一区| 温婉少妇玩3p| 蜜乳av一区二区三区| 18禁在线视频| 国产白丝在线| 亚洲一区二区久久久久| 亚洲综合性网址| 国产黄色视频久久| 97中文字幕色| 久久久亚洲欧美综合| 91色图片| 亚乱色| 涩涩久久精品| 日本高清_区二区三区| 麻豆伊人网| 日韩一级久久毛片| 亚洲视频一二区| 蜜乳AV免费观看| 久久久久久久九九九九九九| 日韩精品中文字幕人妻| 啊嗯好大视频在线观看| 人人干人人操人人..com| 日日妻色网| 亚洲日韩成人性爱视频| 四虎精品一区二区| 用力操死我| 性无码专区2020| 97硬碰| 午夜.DJ高清在线观看免费7 | 免费中文在线| 91 偷| 97爱爱爱综合| 日本大香蕉| 一区二区免费电影久久| 国产91 丝袜在线播放 | 久草视频观看视频在线| 91劲爆| 亚洲第一综合| 日本乱人伦片中文三区| 999九九精品| 国产精品青草综合久久| 测评在线观看AV| 99精品热| 久久久A∨| 懂色Av| 97资源欧美| 亚洲黄色网址视频| 亚洲欧美小说| 婷婷久草| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 蜜臀99久久| 91久久久久久久久久久| 欧美在线啊啊啊 | 成人线上超碰| 人妻精品综合中文字幕在线| 精品性爱一二三区| 边做饭边操逼逼| 中文字幕av丝袜| www.久久| 在线国产福利网址导航| 亚洲久9| 后入人妻一区| 午夜天堂啪啪| 久操网无码在线| 欧美综合自拍| 亚洲图片另类| 99精品无码| 99啪啪视频| 很很热性爱视频| 青娱乐淫乱1314| 欧美亚洲清纯| 天综合网欧美| 久久爽爽精品| 蜜臀中文字幕| 天天操妹子| 天天内射| 男人天堂网手机版婷婷| 日韩一级二级三级免费看完整版国语版| 九九性视频| 亚欧日韩成人| 91人妻最真实刺激绿帽| 三男一女不戴套的A片| 综合熟妇一区二区三区| 天天日骚逼熟女| 少妇三P| 欧美综合色站| 99啪| 精品久久久av| 玖玖综合.com| 激情五月天网站| 九色精品视频导航1| 草草草草视频| 蜜臀久久99精品久久久久久酒店| 精品无人区麻豆乱码1区2区图片| 欧洲精品一二三在线| 久草精品国产蜜臀| 久久亚洲天天做| 国内精品999| 久热久| 操高情无码| 伊人丁香五月婷婷| 欧美精品日韩久久久九| 偷拍三区| 风流老熟女一区二区三区l| 无遮挡一级毛片视频免费的| 黄色电影观看久久9| 成人一级性爱| 免费在线观看国内色片网站网址| 青青操轻轻| 免费精品中文字幕| 岛国视频免费在线观看| 日本护士高潮| 国产精品亚洲一区二区三区四区| 伊欧美综合视频| A片 AV一级在线播放观看免费| 少妇3P性爱自拍| 在线无码视频| 国人欧美精品一区二区| 狠狠狠狠狠狠| 中文字幕加勒比海高清无码免费视频| 欧美的性爱网站免费| 亚洲天堂欧美| 天天懆天天日| 国产超碰人人操| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 五月婷婷五月天| 欧美一级三级| 日韩精品第3页| 天天影视网色欲色香| 久久线上视频免费看| 亚洲 暴爽 AV人人爽日日碰| 再深点灬舒服灬太大了添视频| 夜夜影视四色| 欧美日韩国产中文精品字幕自在自线, | 大香蕉久| 五月天婷婷久久| 99亚洲人人| 国产精品久久久午夜夜伦鲁鲁| 精品对白久久不卡| 啊视频在线| 台欧久久精品视频| 欧美综合狠| 亚洲在线欧美| 再深点灬舒服灬太大了好硬好爽| 爱射综合| 亚洲图片欧美另类综合免费视频大大香| 国产三级片在线观看| ji熟女.com| 久久婷婷亚洲| 粉嫩久久久久| 天天插夜夜操| 伊人青青一区成人视频在线观看区| 色网在线| 天天干天天操天天操夜夜操天天操| 国产一级137片内射麻豆| a在线观看| 一区,二区,三区网站| 亚洲人人夜夜澡人人爽| 超碰97资源大奶| 中文字幕综合人妻| 亚洲欧洲中文日韩女优乱码| 久久婷婷五月天| 少妇99| 一级婬片120分钟试看| 亚洲高清在线| 男女啊啊啊啊啊| 黄骗免费| 日本道日本道中文字幕日本道最新日本道在线观看 | 亚洲图片 91| 亚洲日本大香蕉1| 一级@啪啪视频| 欧美性天天影视| 国产中文字幕在线观看| 曰韩操B| 九九九午夜| 色97干| 岛国成人av在线播放网址| 国产熟妇一区二区| 国产精品免费1区2区视频| 五月激情小说| 蜜臀久久99精品久久久久久成人小说| 亚洲最大AV网| 热热色AV| 美女被艹尤物视频| 国产蜜臀在线| 99碰碰| 国产精品一区在线播放| 99综合免费视频| 一二区在线观看视频| 思思热影视| 久久青青草原免费视频| 丝袜综合| 久久无码一区二区二三区性色| 爱射综合| 久久精品 六十路 熟女 欧美| 精品夜夜澡人妻无码| 另类欧美色| 精品久久久久久亚洲| 97操B| 国产精品免费视频人成| yazhouzaixian| 黄片www.| 国产精品夜夜| 欧中日成人免费影视| 亚洲无码精品AV久久久| 怡红院成人av| 亚洲αv一区二区三区| 欧美日韩亚洲国产中文永久天天看| 少妇xx精品| 十八禁电影伊人网| 中文字幕在线免费观看视频| 中文字幕在线免费观看 | 久久99视频| 久久99九九九九6666免费观看软件| 国内毛片免费h片在线| 白嫩妹子国产骚| 色情五月婷婷| 中文字幕五月婷婷免费| 四虎影视国产精品| 婷婷国产精品九区| 中文字幕日韩人妻视频一区二区三区 | 美女十八禁| 婷婷99狠狠| 高潮精品| 欧美综合 站| 日韩成人综合网| 国产日本一区二区三区蜜臀在线观看| 欧美97日韩| 日本国产欧美高清在线| 欧美AB在线| 啊啊啊不要好爽日韩无码一区| 久久精视频美日韩在线视频| 极品白嫩美少妇在地板上位骑射淫水泛滥| 后入式在线免费观看60秒| 亚洲成人美女无吗| 久久只有精品| 校园春色美腿丝袜 | 男人的天堂啪啪| 日韩av免费一级电影| 九九九九九九精品| 天天做天天爱天天爽AV| 91精品久久久久久综合五月天| 蜜臀视频网站| 91国产丝袜美女| 99re6久热只有精品6在线直播| 懂色av色欲av蜜臀av| 怡红院成人视频| 亚洲污一污二| 日韩av熟女一区二区三区成人| 国产综合永久精品日韩鬼片| 国产在线能看的你懂的| 中文字幕视频在线观看| 夜夜高潮夜夜爽国产伦精品| 天天内射| 久久日本熟女精品一区| 99热免费| 男人天堂2012| **一级毛片国产| 在线播放免费av福利片| 操屄日韩| 国产精品乱码久久久久| 日本一卡二区在线| 久久人妻无码毛片A片麻豆| 久久久久久亚洲精品中文字幕人妻| 色婷婷九月天天综合| a男人的天堂久久一级A毛片| 欧美不在线| 日本高清视频在线观看黄已三辽| 后入式在线免费观看60秒| 97玖玖人妻| 婷婷在线视频| 久久久无码精品人妻二区| 操死我了嗯嗯嗯| 久久久婷婷| www.97在线| 天美传媒一二三区永久网站| 欧美国产日韩清纯唯美 | 少妇久久久久久| 中国熟妇| 超碰色97| 欧美高清色| 女优大全 - 91n| 亚洲Av诱惑| 日1区2区3区2020| 国产精品一级二级在线| 欧美国产操逼| 欧美日韩亚洲少妇寂寞影院正在播放| 暴力av在线| 女上位精品在线| 好爽要喷了| 欧美线天码中字| 国产精品午夜精品| 久久久青青草| 91亚洲欧美| 天天草天天日| 91精品久久久| 九月丁香综合网| 日韩免费看黄片| 精品亚洲国产成人AV制服丝袜| 一级啊性爱在线视频| 国产一区二区三区影片| 国产免费一区二区在线A片视频| 精品超碰国产| 禁片 高清 在线观看视频网站| 超碰97起碰| 91九色丨国产丨爆乳| 久久国99999| 精品国产久久乱码| 综合亚洲欧美| 99久久综合| 大香蕉之青青草原| 国产91丝袜 在线播放| 欧美激情久操网| 亚洲国产欧美一区二区潘金莲| 国产精品久久99日日| 日韩激情啪啪| 亚洲视频,小说| 97精选久久| 精品欧美乱码久| 大香蕉免费3| 一级特级aaaa毛片免费观看| 中文字幕永久在线| 亚洲免费97免费| 深爱伊人影院| 亚洲成人在线高清| 色婷婷导航| 亚洲日韩青青草色月| 蜜桃午夜视频一区二区 | 啊啊嗯嗯好爽| 丰满高潮18xxxx| 色欧美天天| 大肉棒导航| 亚洲欧美小说| 婷婷丁香五月激情啪啪| 91日日| 国产搭汕a级片| 十八禁av无码免费网站APP| 丰满人妻av一区二区三区| 精品熟女一区=区三区| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美亚洲激情| 欧美中出1| 欧美激情欧美精品| 超碰78| 人人色人人操在线| 日日夜夜模| 电家庭影院午夜69久久夜色精品国产69乱| 夜嗨影院| 9999亚洲精品| 五月天婷婷在线看| 91丝袜美女国产| 久草精品一区| 国产又黄又粗的视频| AA丁香综合激情| 四虎在线观看网站| 欧美性爱无码一区二区三区| 蜜桃中文字日产乱幕4区| 免费视频观看60秒| 秋霞曰韩R级| 密臀AV在线| 狠狠婷婷亚洲中文综合久久| 一二三区在线| 大奶的诱惑| 国产91久久九九免费精品无码| 亚洲熟妇熟在线电影视频| 加勒比中文av| 99热超碰| 色吧5亚洲| 中文字幕精品一区二区精品| 久久粉色| 91老熟女逼| …亚洲黄色厕厕女女在线播…| 久久久久国产一区二| 亚洲男人的天堂网| 国产AV精久久| 96久久久精品| 成人免费福利在线观看| 风骚少妇视频中文字幕| 国产成人无码高清| 91N综合网| 伊人久久艹| 亚洲天天自拍| 农村妇女一级二级三级视频| 久久久久久久91| 五月丁香色婷婷| 亚洲色电影在线| 又大又白奶子| 麻豆三极片| 欲色影视综合吧| 欧美精品23| 亚洲诱惑| 亚洲av淫乱| 一本大道久| 很很干很很操| 国产乱伦视频污| 欧美一二在线| 日本中文字幕在线视频| 亚洲成人ab| 欧美色图片91| 日韩国产成人自拍视频| 婷婷10月天青娱乐| 精品网站9999| 一类无码操逼视频| 久久精品成人| 欧美性色综合网| 天天色,天天干,天天干| 一二三四区操操Av| 中文字暮97| 777琪琪午夜免费A片| 美女丝袜激情小说| 97国产色综合| 911av网站免费观看| 91网站在线播放| 六月丁香网| 浓厚中出中文字幕在线| www.人人摸在线视频| 啊啊啊用力在线观看| 成人无码电影在线观看网| 九久久精品| 久jiu久神马影院| 国产女人和拘做爰视频| 中文字幕视频二区| 97热视频在线观看| 99啪啪视频| 黄色性爱网网| 伊人黄色片| 天堂性色| 女同性恋中文字幕| 精产国品一区二三产品| 成人欧美一区二区三区黑人一| 亚洲熟伦熟妇AV无码春色| 偷拍片久久| 国产高清1234区| 老司机射| 涩涩涩综合| 国产精品久久泡妞网站| 欧美日韩人妻婷婷一区| 嗯嗯啊啊啊好舒服| 日韩性爱播放| 亚洲国产麻豆一区二区三区| 亚州熟女乱伦| 屁股久久久久久| 国偷自 一区| 久久 亚洲 日韩 人妻| 精品女人999| 日本日皮视频逼| 中文字幕高清精品一区| 少妇久久| 日日夜夜免费| 精品人妻一区二区三区四区| 懂色av中文字幕一区二区三区天美 | 青娱乐欧美激情一区二区| 成人性生活高清视频在线播放| 日本久久999| 亚洲欧美另类少妇精品| 成人影 天天操 亚洲| 91狠狠综合久久久| 精品性爱无码在线播放| 久草网站免费在线观看| 日韩欧美午夜一区二区| 日本人妻伦在线中文字幕| 亚欧美色| 99国产女人| 日韩精品三级| 大香蕉视频啪啪啪啪| 熟妇高潮二区三区| 18禁久久| 亚洲 欧美 第一页| 97伊人网| 伊人网免费视频| 久久免费老司机精品| 美女久久久久久久久久久| 国产强奸乱伦xd| 午夜视频久久久| 一区二区三区四区五区高清无码永久视频 | 欧美熟妇精品黑人巨大一二三区| 久久综合18p| 色色色色色色色色色色色色色色综合| 日韩欧美视频青青| 天天综合AV| 天色综合网| 啊啊啊不要啊啊受不了了视频在线| 欧美狠狠鲁| 99蜜桃臀久久久欧美精品网站| 亚洲 欧美 另类 日韩 人妻一区 | 韩日精品四区| 九九热精品免费视频| 天天干天天日天天射黄色| 欧美日韩资源在线| 男人天堂综合| 区自美91| 国产AV中文| 一起草三级AV电影在线观看| 亚洲精品国产无码高清| 全球成人中文在线| 红杏大香蕉| 亚洲丝袜色图| 综合色久欲| 久久久久久九九九九九| 伊人国产成人av网站| 黄人人操人人操| 激情小说成人日本无码一| 精品一二三区久久AAA片| 99精品久久| 最新亚洲风情电影| 99精品丰满人妻无码| 78精品| 思思热在线视频免费| 3028国产精品| 亚洲日本韩国极品一区二区| 99re99视频在线免费观看| 青青青草原| 国产精品999aaa| 综合久久久久久久综合网| 情色五月天就去干| 欧美超碰97| 色伊人91| 日韩天堂av电影在线观看| 插入粉嫩少妇视频| 国产呦精品系列在线观看| 男人a天堂手机在线版| 人妻熟女午夜精品在线| 啊啊啊啊啊啊啊在线| 九九热三级片| 岛园激情| 夜夜国产一区| 国产精品操| 欧美人妻一区| 96免费视频在线| 中文字幕AV中出| 一级黄色视频网| 裸体美女国产免费久久久网站| 久久九精品| 91网站18| 长长久久88视频| 夜夜夜夜爽| 在线中文字幕| 丰满翘臀美女影院视频| 超碰97极品9| 日本三级A片网站com| 水澄无码AV| 欧美瑟综合| 国产人伦a片信息免费片| 丰满少妇一区二区三区专区| 外国免费性情大片| 亚洲国产日韩欧美熟妇在线| 亚洲污污网站| 91精品微拍福利| 久热69九色熟妇97| 超碰99re| 丁香五月激情网| 国产中文字幕在线观看| 人妻乱仑一区二区三区| 色超碰综合| 一区二区三区免费视频入口| 亚洲情色第一页| 新怡红院| 激情小说五月天| 超碰综合97在线| 久久精品毛片免费不卡| 99蜜桃臀久久久欧美精品网站| 日韩一级欧美一级国产一级台湾| 夜夜操二区| 亚洲人妻久久| 一本一道人妻久久一区二区三区 | 屁屁影院一区二区三区国产| 欧美成人国产精品| 成人免费不卡在线视频| 欧洲站一级二级三级h| 国产激情av女片自拍| 亚洲日韩欧美一区二区| 免费作爱一级视频| 99色在线| 天天日日夜夜| 亚洲九九九| 中文一区二区婷婷视频| 欧美日韩性爱电影在线| 人妻酒店出差被中出免费在线播放| 黄色大片免费在线| 国产第二页| 蜜臀AV网站| 国产精选视频| 99999精品视频| 日韩av电影成人在线| 91总综合网| 日韩亚洲Av人人夜夜澡人人爽| 老司机福利社视频在线观看| 久久久激情| 日韩在线观看三级电影| 欧美一二在线| 曰韩成人免费视频| 天天日天天看| 熟女中出视频| 精品国产一级久久| 亚洲色阁| 免费网色网站| 九九性视频| 日韩性爱小视频| 少妇色综合| 嗯啊不要在线| 欧美黄色片在线播放| 国产中午字一暮区| 成人精品电影| 國產尤物AV尤物在線觀看| 久久中文字幕在线观看| 婷婷情色五月天| 自拍偷拍2025在线观看| 婷婷色综合欧美日韩| 久久少妇人妻| 九九热男人天堂| 欧美顶级黄色大片免费| 热99re69精品8在线播放| 男人天堂综合| 久久久爆乳翘臀一线天伦理视频| 少妇一级婬片免费放一级a性色.| 久久久极品| 少妇69中文| 色五月激情综合网| 成在线人在线观看视频| 婷婷激情四射| 日韩 女同 综合| 偷拍欧美激情| 90后性网国产欧美| 午夜一级免费毛片| 97资源久久| 国产精品大屁股999| 综合干干干av久久久综合网| 偷窥自拍亚洲天堂网爆| 人人操人人操人人操人人操人人操人人人11.CM | 欧美色棕合| 亚洲第一在线视频| 日本成人A片网站| 干少妇视频| 蜜桃午夜视频一区二区 | 97欧美精品综合| 久久ww| 黄色视频特级毛片| 性暴力欧美猛交在线直播| 美女网站91| 18精品一二区| 天天爱综合网| 好舒服视频| 少妇一区二区三区在线观看| 激情综合97| 色99视频| 天堂种子在线www网资源| 性爱Av免费| 日本性交操一区二区不卡系列| 欧美综合亚洲综合| 上床啊啊啊| 天天综合网亚洲综合网| 色天欧美| 伊人 俄罗斯 a v| 欧美丝袜激情| 国产精品2020| 免费农村成人少妇人妻Aa一区二区视频 | 色欲无码人妻日韩欧美精品| 五月丁香六月综合缴清无码| 国产精品不卡av免费在线观看| 偷拍盗拍亚洲色图图片| 97se亚洲综合自| 国产综合久| 竹菊一区二区三区AV线| 亚州五月| 老熟女天天操| 久久国产精品m码| 久久久偷拍| 亚洲 在线| 亚欧成人一级片在线播放| 激情一区二区| 少妇被c 黄 免费观看| 免费试看60秒| 亚洲巨爆乳一区二区三区四季网| 大香蕉一级黄色片久久| 日韩av在线精品观看| 国模无码人体一区二区三| 我要去看2个日本美女.com曹逼 | 天天看片青娱乐| 欧美AB在线| 亚洲人成在线放东京热| 边做饭边操逼逼| 中国一级特黄大片护士| 夜夜影视四色| 人妻av在线| 亚洲 欧美 中文 日韩超碰| 97在线免费看| 欧美国产有色电影| 超碰97资源网亚洲| 搡老女人老91二区| A片大香蕉在线| 国产成人一级av88| 国产三级电影免费观看| 色香色香欲天天天影视综合网| 日韩女优中文字幕| 动漫av中文| 小电影欧美91| 日韩无码嘿咻黑热久| 亚洲人在线成线成人| 中文字幕久久精视频久久大全| 亚洲十八禁止| 综合 亚洲 欧美| 一级性爱啪啪视频| 久操热线| 欧洲精品在线播放| 九九九九九九综合| 欧美v亚洲v综合v国产v妖精| 国产精品色片一区二区| 亚洲麻豆精品二区三区| 曰本91情色| 日韩一级二级三级| 一级片在线观看高清无码| 色官网在线| 麻豆乱码久久精| 老鸭窝成人| 一级做受视频免费是看美女| 日本操BAV| 67194无码不卡| 久久机热| 日韩字幕一区| 色色婷婷五月| 亚洲激情天堂网| 天天肏天天干| 亚洲精品啪视频| 亚洲91亚洲| 农村少妇久久久久久久| 日韩国产不卡在线视频| 欧美色图天堂在线| 日韩电影免费网站麻豆视频| 色综合一本| 丁香五月色情| 青青草玖玖爱| 国产在线综合福利网站| 久9热| 免费成人在线熟妇网| 欧美后入| 婷婷五月丁香五月| 欧美激情亚洲情色| 激情五月天插| 啊啊啊好湿国产一二| 亚洲情色 自拍| 日日操丁香五月天| 久久有碼| 91精品人妻偷情| 国产按摩一区二区三区| 亚洲不卡一| 操逼操逼视频操逼| 97超级欧美| 日本黄色精品专区网站| 日韩偷拍色图| 色97干| 99精品免费| 亚洲欧美校园| 91精品无码人妻系列| 黑人与人妻| 人妻中文字幕精品无码| 欧美丝袜激情| 91被操| 老熟女区| 白丝被操91| 日本一区二区三区精品| 国产激情视频一区区三区| 99热免费| 91亚洲在线| 天天综合网国产| av中亚| 美女在线H91| 人妻一区二区三区四区视频| 日韩在线国产字幕| 国产又粗又又黄又猛| 啊v在线观看视频| 天天摸,夜夜摸| 欧美色图第一页| 欧美成人9797| 色综合av综合久久| 超碰97色色| 丁香九月 婷婷| 吉川爱美亚洲二区在线| 亚洲AV无码AV吞精久久久久| AV色图| 亚洲色诱惑| 中文字幕乱码在线观看| 伊人综合色网| 自拍偷拍第26| 亚洲精品1区| 久久肏大逼| 国产熟女无套内射| 少妇蜜汁| 免费一级特黄特色大片在线观看看| 日影院久久婷婷夜夜网| 99热只有这里有精品| 91国产丝袜白虎| 天天影视网综合少妇| 精品日韩人妻视频| 99久在线精品99re8热视频在线| 天天做日日爱夜夜爽| 九九九九热只有精品| www.狠狠干.coom| 大香蕉视频一二三区| 青青操视频在线| 夜夜草网站| 国产激情视频一区区三区| 青青草色情网站视频| 91足交| 不卡二三区人妻少妇| 丝袜性亚洲| 国产AV激情无码久久无码| wuyechaopeng| 美女露胸露屁股| 艹精品| 999热这里只有精品| 欧洲乱码一区二区| 亚洲色图亚洲无码强奸乱伦| 欧美狠狠| 天天操天天日青青草超碰av| 少妇超碰在线| 久久五月天婷婷丁香中文字幕| 97操97干| 骚逼一区二区| 亚洲男人天堂Av| 秋霞久久亚洲精品成人| 熟妇女伦乱视频| x97av| 91在线美女| 国产热RE99久久6国产精品首| 69XX一中文字幕人妻91| 精品成人久久久人人亚洲| 欧美天天综| 屌色在线97视频| 青椒国产97在线熟女| 91无遮挡| 在线洲亚线| 久久久久元码视频| 一二三啪啪专区| 91精品久久久久久77777| 成人性爱av| 天天插网| 亚洲资源一区| 欧美一区二区三区成人性生活| 日日夜夜摸| 欧美另类丝袜熟女| 91色色综合| 亚洲棕合电彰| 2011国产精品| 超碰免费人人| 人妻人人做人人澡人人爽欧美一区| 日韩性爱小视频| 欧美宗合网| 男人天堂最新手机版在线青青草| 熟女欧美日韩综合婷婷| AV天堂丝袜| 九九九九九九九精品视频| 亚洲性爱无码乱伦av| se01国产在线视频| 久久久久久99AV无码免费网站| 超碰97丝袜| 久久精品电影在线| 欧美丝袜亚洲| 97网站在线观看| 久久久久久少妇| 久久99草| 日韩中文字幕宗合在线| 美女诱惑在线一区| 白丝少妇一区二区| 五月婷婷hd| 午夜福利久久久噜久噜久久综合| 久久久一级| 五月丁香综合| 一本一道人妻久久一区二区三区| 99精品在线播放| 激情综合网激情五月天| www.色综合| 色吧五月| 床上啊啊啊一区二区三区| 伊人激情| 韩国久久97| 天天综合~91入口| 大香蕉在线视频15| 一区二区三区男女操逼黄色小电影| 97亚洲性爱| 一区麻豆 高清中文字幕| 欧美亚综合色图| yazhousetuoumei| 青草香蕉网| 亚欧美综合网。| 日本高清一本二本免费不卡| 天天综合站| 91精品丝袜久久久久久| 久久久久久久精| 插入逼91| 精品无码久久久久久国产浪潮| 欧美性爱日韩性爱| 无码乱人伦中文视频| 日韩黄色成人性爱| 天天干少妇| 亚洲熟妇图片| 熟女AV一区| 一本大道久| 亚洲国产综合图区中文字幕 | 一区二区影视| 日韩三级在线观看网站| 韩国黄片aaaa| 日本99热| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 久久性爱城| 色欧美天天| 国产高清不卡视频| 人妻熟女一区二区| 青娱乐黄色录像| 亚洲国产成人精品久久久国产成人一区二区 | 日本精品性生活久久久| 国产丝袜一区二区三区| 久久久久久久性爱| 无码免费在线观看黄色片| α√在线| 天天插天天舔舔天天干| 激情小说亚洲图片| 亚洲情色视频| 亚洲最大成人a毛毛片| 91日韩在线| 色噜噜人妻丝袜AV资源| 91亚洲黄色网| 伊人网免费视频| 婷婷AV一区二区三区| 小草三级久久观看| 一类无码操逼视频| 国产无马av| 欧美午夜色妇色鬼| 97日韩欧美亚洲| 国产91亚洲精品一区二区三区| 强奸乱伦Av网| 丝袜制服字幕在线| 色哟哟av| 三级AV入口| 淮穴色AV| 日韩欧美久久婷婷网站| 人人操人人干xxx| 99九九精品| 国产天美传媒精品| 啊啊啊啊啊在线| 欧美强奸乱| 伊人国产av| 日日躁夜夜躁狠狠躁超爽| 日本不卡高清视频| 久久久99久9| 青青草色AV| 91高清无码下载| 97大色网| 亚洲色图91| 超碰狠狠操| 四虎免费视频| 1级黄色夫妻对换性交免费看| 五月综合色| 久久久久幕乱码| 美国人人操人人操| 欧美激情 日韩精品| 丝袜 中出 制服 人妻 美腿 中文字幕| 26uuu性物| 97中文字幕色| 白丝一区| 啊啊啊啊嗯嗯嗯用力好爽| 亚欧美无遮挡| 在线v中文字幕一区二区三区| 嗯嗯啊啊好疼| 国产在线视频二区| 激情图片亚洲色图| 久久大黄片| 人妻天天夜夜爽一区二区| 久久久精品,3| 国产成人自拍视频在线| 超碰97久久国| 99性爱在线观看| 91天天c| 国产强奸乱伦xd| 久草色悠悠在线视频| 97超碰色| 18一区二区三区| 日韩兔费看黄片| 91在线美女| 99色网| 天天操女人| 欧美激情激情xxxx欧美专区| 国产剧情一区在线观看| 色97干| 这里只有精品视频| 啊v在线观看视频| 成年女人一区| 伊人天天久久动态图| 欧美三级一级| www.亚洲成人一区| 丰满搜索结果 -第18页- 久久高清无码| 黑人娇小av在线播放 | 亚洲码专区| 人妻另类| 丝袜美腿诱惑亚洲欧美视频在线观看| 无码人妻一区二区三区四区老鸭窝| 丁香五月色情| 天天综合-91入口| 夜夜嗨AV蜜臀av| AV在线性爱| 91激情综合| 免费观看啪视频| 美女网站91| 欧美日韩淫加| 日韩人妻一二三区视频| 黄色av播放免不| 91色欧美| 另类图片五月| ji熟女.com| 少妇精品久久久八区九区| 五月婷婷性爱| 热思思免费视频| 99精品人人爽| 超碰久热| 激情小说日韩无码| 色爽——AV| 天堂精品在线| 女同女同恋久久级三级| 亚洲在线观看| 99久久com免费视频′| 日韩美女啪啪一区| 久久久免费高清中文视频| 中文字幕 人妻不满 在线视频| 国产精品国产亚洲区艳妇糸列| 综合91网| 操久久久久久| 国产最新小视频在线播放下载| 久久九九热| 九一综合精品视品av| 日本操逼二区| 丁香九月婷婷| 国产精品在线一区二区| 亚洲综合小说另类图欧美视频激情小说色五月天 | 免费人人搞97| 久久久久婷婷| 亚洲成人精品在线一区| 好爽要喷了| 日本天堂网| 白嫩国模丰满一二三区| 99久久久无码国产精品性啊聊| 日本免费一区二区不卡| 久久婷婷国产一区二区色| 日本操大逼| 久久大黄片| 综合熟妇一区二区三区| 国产精品。| 人妻少妇久久久| 国产精品一二三在线看| 国产内射爽爽大片| 999热日韩精品| 成人十八禁日韩欧美一二三| 爽爽歪在线视频| 国产无码一二三区| 日韩操p| 91人人操| 婷婷探花久久精品一区| 男生女生啊啊啊啊| 亚洲综合色男人网| 日本福利二区视频| 国产成人午夜视频网址| 综合另类| 色欲久久99国产精品久久久久久| 九九九精品一区二区无码| 国产有码一区| 大香蕉97久久| 99爱爱| 无码抄逼网| 亚洲欧美在线观看免费| 日韩免费av片高清无码| 欧美黑人熟妇精品91| 丰满熟妇大乳做爰| 黄色一区三区| 伊人伊人LD| 丝袜天堂| 久久亚州高清| 久久久亚洲精品电影免费看| 国内外色色色色色成人视频| 久久一区二区三区入口| 国产熟女完整版中字 | 三男一女不戴套的A片| 精品久| 欧美96精品在线| 亚洲资源站| 亚洲综合在线第一页| 欧美亚州综合网图片| 四虎免费在线播放| 青青草原成人| 91久久久久| 激情婷婷丁香网| 97精品人妻一二三四| 我想要啊 啊 啊| 偷拍新久久| 99999亚洲另类| 久夜操| 日本欧美不卡| 男人的天堂一区| 亚洲日韩天堂| 亚洲国产综合图区中文字幕 | 一区二区三区高清 | 91女优在线观看| 日韩中文9| 2020中文字幕在线| 超碰色美女| 99热伊人| 蜜臀久久99精品久久久久| 人人么人人操| 亚洲无无码αⅴ每日更新| 国产精品久久久久久久AV大片| 巨爆乳一区二区爆乳区| 强奸乱伦Av网| 国产精品熟女乱伦| AV 少妇 人妻 偷拍| 97久久久久久久精| 中文有码第五页| 欧美日韩青操| 超碰在线综合97| 中文三一区| 亚洲人成在线放东京热| AV一起草在线| 日韩精品1区2区中文字幕| 国内精品伊人久久久久影院会| 99色综合| 欧美熟妇人体| 老女人91| 欧综合网| 久热影视| 男男H黄动漫啪啪无遮挡网站| 亚洲精品视频在线| 嗯嗯嗯不要不要免费视频| 国产熟女二区| 欧美性高潮| 精品国产三级av韩国在线| 亚洲天堂人妻熟妇视频| 超碰在线看| 求求你操操我| 国产9熟妇视频网站| 免费人成毛片乱码| 黄片com.| 久久欧美按摩999| 人人爽人人精品乱人伦AV| 国产精品日日摸天天碰| 日韩免费av片高清无码| 8050午夜少妇无码| 四虎影库国产精品免费| 91女优在线观看| 91美女在线观看| 逼逼逼逼操操操操操操操操操午夜剧场|