欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

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

zenity實戰(zhàn)指南:給Linux shell腳本添加圖形對話框 寫過 Linux 運維腳本的朋友應(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è)的 Linux 用戶。1. zenity 是什么在終端腳本里畫出圖形界面1.1 為什么腳本需要圖形對話框很多人有一個誤區(qū)命令行工具就該老老實實待在終端里要圖形界面為什么不直接寫個 GTK 程序但現(xiàn)實情況是大部分自動化腳本只需要一兩個交互點比如選擇要備份的目錄、確認(rèn)是否刪除舊日志、展示處理結(jié)果。為了這幾個交互去寫完整 GUI 程序要處理窗口生命周期、信號回調(diào)、布局管理工作量完全不成比例。zenity 填補的就是這個空隙它像一個對話框工廠你給它幾個命令行參數(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 文件選擇器用戶用圖形界面瀏覽、點選選好之后路徑直接賦值給變量。這體驗差距是質(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)輸出。這里有一點值得展開說zenity 是阻塞式的。腳本執(zhí)行到zenity這一行時會暫停直到用戶在對話框中點擊按鈕或關(guān)閉窗口zenity 進(jìn)程退出后面的代碼才繼續(xù)跑。正是因為這種阻塞模型腳本可以用同步邏輯寫交互不需要搞異步、回調(diào)那一套。用戶點的按鈕決定了退出碼——一般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é)作時尤其好使。值得注意的一個冷知識這三個對話框即使顯示的是錯誤用戶點擊確定后退出碼依然是0因為 zenity 認(rè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鍵或點擊窗口右上角的關(guān)閉按鈕退出碼也是1。所以腳本邏輯里取消分支要覆蓋所有非確定的情況別假設(shè)用戶只會乖乖點按鈕。2.3 文本輸入框和密碼框收集用戶輸入--entry生成帶一個文本輸入框的對話框適用于需要用戶輸入一個值的場景比如輸入主機名、端口號、正則表達(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)容顯示為圓點。它在彈窗層面跟--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 日歷控件用戶直觀點選zenity 輸出固定格式Y(jié)YYY/MM/DD到標(biāo)準(zhǔn)輸出SELECTED_DATE$(zenity --calendar \ --title選擇計劃日期 \ --text點擊選擇日期: \ --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 運行中 80 \ mysql 已停止 3306 \ redis 運行中 6379 \ --width450 --height250)當(dāng)對話框只有一個列時用戶點擊的行內(nèi)容直接輸出有多個列時默認(rèn)輸出第一列的內(nèi)容。如果想拿到所有列需要加--print-column參數(shù)指定列號配合--separator指定分隔符SELECTED$(zenity --list \ --title選擇主機 \ --columnIP --column主機名 \ 192.168.1.1 web-server \ 192.168.1.2 db-server \ --print-column1 --separator,)--list的默認(rè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的返回值時滑塊拖到最小值和用戶點取消都會返回1的退出碼但標(biāo)準(zhǔn)輸出不同判斷時要把退出碼和輸出值結(jié)合著看別把用戶設(shè)置了最小值誤認(rèn)為用戶取消了。4. 進(jìn)度條實戰(zhàn)讓腳本進(jìn)度看得見4.1 基本用法標(biāo)準(zhǔn)輸入喂百分比--progress是 zenity 里被問得最多的對話框原因在于它不像其他對話框那樣點一下就有結(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% 窗口也一直掛著等用戶手動點掉。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強制行緩沖( 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)判斷用戶點取消就退出循環(huá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這種模式把一堆零散的運維命令包成一個可視化菜單使用者不用記命令、不用記參數(shù)點點鼠標(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顯示桌面選項用戶點選后腳本自動執(zhí)行對應(yīng)的gsettings set命令。這種做法非常適合給同事提供一套安全的圖形化系統(tǒng)調(diào)整工具避免他們直接去翻 dconf 數(shù)據(jù)庫。原理相通你可以在自己的桌面環(huán)境中嘗試類似的組合思路比工具本身更有價值。6. 運行環(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)程機器有物理顯示器且你登錄的是本機桌面會話可以手動指定 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本機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)。即使你強行在 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裝好字體后重新運行腳本基本就能正常顯示。另一個坑是腳本文件本身的編碼問題——如果你在 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可能只是參考值。要強制固定大小可以配合--no-wrap參數(shù)但這可能讓長文本被截斷。在實際項目中我一般不對提示框強設(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 都引用它。彈窗來源一目了然多個腳本同時運行時用戶也不會混淆。第二用戶取消操作時靜默退出比報錯退出更好。腳本里每個交互對話框之后都先檢查退出碼一旦為1就干凈退出不要繼續(xù)往后面執(zhí)行。否則用戶明明取消了腳本還往下跑很可能觸發(fā)一系列本不該發(fā)生的操作。第三輸出值一定要做合法性驗證。zenity 只負(fù)責(zé)把用戶的輸入原樣返回它完全不理解輸入內(nèi)容的含義。用戶可能選了空的文件路徑、輸入了帶特殊字符的文本、選擇了不存在的日期。拿到輸出后用test -f、test -d、date -d這些命令校驗一下比事后排查生產(chǎn)事故要劃算得多。第四文件路徑處理統(tǒng)一使用雙引號。這個我已經(jīng)重復(fù)了多次但怎么強調(diào)都不過分。凡是通過 zenity 拿到的路徑要么賦給變量時整體加引號要么在使用處加引號稍一偷懶就會在含空格路徑上栽跟頭。第五zenity 的--timeout參數(shù)值得關(guān)注。部分對話框支持設(shè)置超時秒數(shù)超時后自動按取消處理。把--timeout加在提醒類對話框上可以避免腳本因為等用戶點擊而無限掛起。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)很直白機器上有桌面環(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è)、再健壯如果交互環(huán)節(jié)粗糙使用者依然會覺得這工具難用。給腳本加上幾個 zenity 對話框本質(zhì)上是在提升整個工具的用戶體驗——用戶不需要學(xué)習(xí)命令行參數(shù)不需要小心翼翼輸入路徑和日期只需在彈出的窗口里點選、確認(rèn)操作門檻一下子就降下來了。這個投入產(chǎn)出比我覺得是每個寫腳本的人都值得去算一筆的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久97| 日本在线视频播放91| 色九月丁香婷婷蜜桃在线观看| 狠狠高潮精品亚洲1| 先锋资源婷婷| 伊人色综合网| 操逼视频一区| 开心激情网在线| www.久久| 国产成人高清| 亚洲第一成人无码A片| 成人免费高清在线播放| 色五月第四色| 青娱乐美女福利视频美臀| 日韩成人电影Av| 国产成人网址| 99精品久久| 色爽干| 99精品22| 人妻熟妇六区| 777精品成人a v久久| 亚洲乱码w在线观看| 欧洲色区| 成人精品视频99在线观看免费| 婷婷五月深深爱| 丁香五月六月综合激情| 97在线干| 青青草原伊人网| 国产日产亚系列精品版优势 | 99热最新精品| 日熟女| 91打屁股免费看| 亚洲成人AV在线观看| 丁香5月婷婷| 五月丁香婷婷无码A∨| 99啪啪网| 久久多色| 婷婷综合五月| 91精品久久久久| 国产免费av在线| 69凹凸成人综合网| 五月天婷婷深深爱| 色婷婷五月天天天干天天操天天爽| 六月婷婷五月丁香首页| 99在线观看视频蜜臀| 99视频自拍| 射区导航| www.99婷婷| 久久精品99国产精品日本| 六月丁香av| 99re8这里只有精品99re8热视频| 色婷婷成人五月| 天天操天天爽天天爱| 九热视频| 91精品熟女| 人人干99| 大香蕉综合网| 久久在这里有精品| 二人电影免费版在线观看| 91婷婷丁香五月| 亚洲午夜一区二区| 丁香五月婷婷啪啪| 色综合色综合色综合高潮| 久久丁香五月天| 久久婷婷网| 婷婷五月成人社区| 天堂久久婷婷| 久久综合丁香激情五月| 开心激情网在线| 九九热re99re6在线精品| 人妻久久久久久久 | 99热最新网址| 疯狂做受XXXX高潮A片| 亚洲精品大片| 99在线精品免费视频| 国产人妻777人伦精品HD| 亚洲乱码日产精品BD| 婷婷在线免费| 亚洲V国产V欧美V久久久久久| 国产人妻人伦精品一区二区| 亚洲成人av在线播放| 色婷婷色情| 偷偷狠狠久久婷婷五月天| 日韩无码人妻一区二区三区综合| 久久婷婷五月综合色丁香| 婷婷九月激情| 成人超碰网| 美女久久天堂| 成人 视频免费观看网站| 97操碰碰无码视频| 天天干天天操天天上| 婷婷开心激情综合五月天| 婷婷丁香在线播放| 丁香成人五月天| 国产成人精品亚洲线观看| 黄色录像网点| 色色色色色色五月婷婷| 国产.亚洲.欧洲视频在线| AV激情五月| 久久精品国产AV一区二区三区 | 婷婷丁香色女人| 久久婷婷东京热| 草综合网| 婷婷色六月| 另类激情五月| 久婷婷久草| 91在线看免费 九九九九| 婷婷五月大香蕉| 激情噜噜噜| 亚洲99在线| 婷婷91视频| 91碰| 97干网站| 97人人看| 亚洲综合草草| 永久免费一区二区三区| 婷婷五月av| 99精品网| 五月婷婷网久久| 五月婷婷性爱| 丁香五月日韩| 九九香蕉网| 丁香97综合| 停停色综合伊人| 97婷婷狠狠| 拍色综合| 婷婷五月激情图片| 色99无码| 99A级片| 秋霞网在线免费基地五月婷婷丁香| 草美女在线观看视频在线播放| 91ncm视频| 2013AV天堂| 色婷婷婷婷五月天| 久久婷婷丁香视频网| 丁香九月婷婷色| 五月婷色| 天天擼久久擼在线| 99网址在线观看| 伊人狠狠狠综合| 俺也去色| 99.色| 免费视频在线观看的网站| 激情五月天综合网站网站网站| 91色婷婷综合久久中文字幕二区| 精品在线| 青青久久五月| 亚洲激情综合| 婷婷综合色色| 色狠狠色噜噜AV天堂五区| 激情综合网五月天天| 久久这里都是精品| sewuyue第四色| 亚洲国产精品SUV| 丁香五月婷婷色五月| 亚洲激情久久| Www,五月天| 欧美精品狠狠色丁香婷婷| 欧美婷婷五月| 亚洲操精品| 欧美天堂久久| 天天色伊人| 日产精品一线二线三线芒果| 婷婷五月丁香第四色超碰在线| 五月婷婷色影院| 亚洲人妻电影| 操操操操操操婷婷五月天| 粉嫩av蜜桃av蜜臀av| 婷婷99狠狠躁天天躁中文| 五月丁香色| 日日操夜夜操中国无码| 99性爱| sewuyuetingtingiii| 思思热精品在线视频| 1024成人免费看| 。久久久久久久久久久久久久人妻 | 蜜乳中文字| 日本精品人妻无码77777| 五月婷婷深深爱爱| 天天日色情| 亚洲激情.com| 婷婷人人操| 国産精品| 5月丁香美女影院| 色婷婷伦理| 欧美搡BBBBB摔BBBBB| 狠狠五月天婷婷| 99视频只有精品| 天天爽,天天操。| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲操b| 亚洲欧洲一二| 99精品视频免费观看| 激情伊人| 国产偷人爽久久久久久老妇APP| 99热精品在线播放观看| 久草视频大香蕉99| 婷婷在线视频| 亚洲天堂aaa| 超碰无码318604| 99日韩| 五月丁色AV| se色婷婷视频| 99热主页日本| 精品久久久久久久人妻| 色狠狠色综合久久久绯色AⅤ影视| 五月丁香久久网| 欧美欧盟性爱网| 五月婷A V在线| 丁香五月天论坛| 狠狠色综合网| 婷婷综合在线视频| 婷婷亚洲色| 激情综合色| 国产综合婷婷| 亚洲AV成人无码精品| 久久色五月天| www色五月天| 六月丁香婷婷综合狠狠爱夜夜爱| 国产做爰视频免费播放| PORNY九色9l自拍视频成人| 美女五月天婷婷| 丁香花狠狠婷婷亚洲中文字幕| 爆乳熟妇一区二区三区爆乳| 久热精品视频| 婷婷五月丁香高清无码| 在线你懂的亚洲欧| 九月婷婷综合在线| 亚洲亚洲人成综合网络| 中文字幕成人| 99综合| 精品久久人妻热| 超碰免费人妻| 夜夜爽77777妓女免费下载| 天天日人人爽| 夜夜干天天干| 色五月婷婷少妇人妻| 久久久婷丁香五月天激情综合| 99碰碰。| AV在线不卡网站| 天天弄天天操| 最近韩国日本免费高清观看| 午夜性做爰电影| 97福利视频| 日韩成人电影在线播放| 成人丁香五月| 五月婷婷综合激情| 婷婷香蕉精品| 青青草原爱爱网| 九月色婷婷综合亚洲| 蜜臀久久99精品久久久久久酒店| 偷拍丁香九月激情| 色婷婷亚洲综合av| av在线中文| 国产激情在线| 婷婷月五天在线在线看| 另类综合激情| 开心五月激情婷婷| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 国内久久亭亭| 中文字幕在线免费观看视频| 人人操Av| 精品51XX| 久热91精品| 色色激情网| 淫视馆aV二区一区| 农村熟妇高潮精品A片| 操碰97| 国产乱子轮XXX农村| 欧美顶级少妇做爰HD| 韩国中文字幕91| 丁香亚洲色综合| 日韩成人电影Av| 在线观看亚洲AV| 中文字幕不卡+婷婷五月| 九色PORNY9l原创自拍| 久久久久9999| 婷婷五月天论坛| 99热在线观看这里只有精品| 中文字幕AV网址| 九九99久久| 国产美女无遮挡裸体毛片A片| 亚洲愉拍99热成人精品| 色欲九区| 丁香婷婷啪啪啪| 五月天伊人网| 婷婷五月花| 丁香五月色激情| 天堂综合久| 天天操夜夜啊| 亚洲天堂色色| 国产古装妇女野外A片| 久久久九九九 99| 99久久玖玖| 另类五月婷婷| 五月丁香亭亭操逼| 久久五月天影院| 91日视频| 五月丁香婷爱在线| 人人摸人人干| 99久在线精品| 五月天婷婷在线观看| 五月丁香啪啪网| co超碰在线观看| 日本久久视频| 五月婷亚洲精品| 久久婷婷综合五月天| 色色五月婷婷网| 综激情网| 少妇搡BBBB搡BBB搡毛茸茸 | 色色五月天 亚洲| 婷婷久久久久| h在线看免费版在线看| 夜精品无码A片一区二区蜜桃 | 久久99久久99精品免视看婷婷| 亚洲婷婷五月| 青青艹b| XXXX岛国| 看片视频在线免费日产在线看| 婷婷五月天激情五月天深爱五月天| 97干综合网| 无码视频国内精品久久久| 九热免费视频| 色婷另类| www热久久yy9| 九九热视| 亚洲99一级无嗎特制在线| 最新午夜理论片| 综合视频久久| 亚州操操| 成人婷99最新| 好看的国产精品| 直接看的AV网站| 中字幕视频在线永久在线观看免费 | 99亚洲视频| 五月丁香六月激情| 色婷婷激情五月天在线观看| 1024操逼| 天天cha成人综合网| 激情五月综合亚洲另类| 99精品国产在热久久| 久久婷婷婷| 六月激情网| 97五月天婷婷| 久久综合五月情| 五月天激情日色在线| 日日干日日| 大香蕉久久伊人婷婷五月丁香| 日韩在线视频网站| 亚洲成人AV在线播放| 天天做天天爱天天高潮| 国产精品成人AV在线| 日韩在线观看亚洲| 中文字幕AV在线播放| 天天操中文字幕| 丁香六月成人网| Www,五月天| 久久日本wwww色| 九九热精品视频九九| 成人无码精品1区2区3区免费看| 色五月婷婷久久爱| 久久R激情| 99热精国产这里只有精品| 国产熟妇的荡欲午夜视频| 国产噜一噜天天噜| 99国产在线精品视频| 久久五月天激情视频| 久九男女天堂| 色偷偷五月天| 久久er这里只有精品| 另类五月婷婷| 久久五月天婷婷| 另类综合激情| 五月婷婷国产| 99热免费在线| 精品一区二区三区木瓜| 麻豆精品| 欧美25p| 九九热10| 亚洲成人无码免费| 狠狠色狠狠操| 久久婷婷五月综合伊人| 丁香五月色色| 天天草女人| 九九热免费| 丁香五月停停基地| 一点色成人网| 激情五月婷黄版| 久久99婷婷| 成人午夜天| 人人操人人爱丁香五月| 四虎成人精品永久免费AV九九| 五月丁香六月激情在线| 天天插AV丝袜中| 五月丁香综合激情网| 深爱五月婷婷| 婷婷色操| 丁香激激情网| 99久视频| 久色大香蕉| 伊人婷婷五月天| 激情五月天之五月婷婷| 婷婷趴趴| 丁香六月婷婷基地| 精品国产va久久久久久久| 亚洲字幕AV一区二区三区四区| 日撸夜撸日操| 另类小说五月天| 婷婷操无码| A片一曲| 色婷婷九月综合| 99热综合网| 激情婷婷狠狠干综合| 日本系列_4页_777FP| 色五月天网| 色色色色综合网| 婷婷五月成人社区| 性爱久久| 丁香五月在线观看| 九九热99熟女| 天天操狠狠操| 五月丁香六月色婷婷| 激情另类综合| 丁香五月婷婷偷拍| 狠狠色噜噜狠狠亚洲A∨| 婷婷丁香六月天| 玖玖午夜视频| 久狠狠狠| www.狠狠艹| 夜夜www| 99视频精品| 婷婷五月18永久免费网站| 精品一二三区久久AAA片| 生活片五区| 六月丁香社区| 丁香五月婷婷骚视屏| 婷婷激情丁香五月婷婷激情丁香五月婷婷| 五月天婷婷爱| 99狠狠| 婷婷五月丁香激情图片| 激情5月婷婷| 亚洲免费看片| 五月激情在线| 狼人久草| 99噜噜噜在线播放| 久久久国产精品黄毛片| 国产偷人爽久久久久久老妇APP| 色啪网| 97资源碰碰在线| 超碰99热在线观看| 天综合日日夜综合7799| 日本久久9| 丁香五月色情av| 午夜亚洲AV日韩无码| 思思99热| 亚洲中字AV电影在线网站| 日本狠狠干| 九色婷婷| 国产偷人爽久久久久久老妇APP| 五月天婷婷综合| 六月激情婷婷| 人妻AV在线| 色丁香五月婷婷| 99久久婷婷| 国产精品第一国产精品| 91919191919久久成人视频| 嫩草AV久久伊人妇女超级A| 久久婷婷五月天| 五月天综合在线| 成人精品视频99在线观看免费| 欧洲色| 乱精品一区字幕二区| 成人国产欧美大片一区| 另类亚洲电影| 六月婷婷av| 五月丁香六月婷综合成人综合 | 久久五月丁香伊人青草| 9这里只有精品| 秋霞三及片| 五月天婷婷在线播放| 五月丁香在线观看| 亚洲操b| 久久五月婷| 成人国产欧美大片一区| 九九精品碰| 大香蕉五月天婷婷丁香91| 婷婷丁香五月亚洲欧美| 夜夜撸天天日| 综合99久久| 激情五月综合| 好色婷婷| 六月香五月婷| 丁香婷婷九月| ..真实国产乱子伦对白在线_欧| 超碰免费人人肏| 亚州综合色| 99亚色色色| 精品免费99| 99人妻碰碰碰久久久久视| 五月丁香婷婷色| A片试看120分钟做受图片| 国产激情综合五月久久| 六月综合婷婷开心伊人| 丁香婷婷浪潮AV久久综合| www.99热在线观看| 九九热精品视频九九| 婷婷综合精品| 超碰人人在线观看| 精品国产va久久久久| 五月天六月婷婷电影| 亚洲色图五月丁香| 色www99| 日韩另类| 天天激情欧美美女| 精品欧美性爱超级爽| 怡春院久操| 天天射影视综合网| 丁香六月在线| 亚洲一区二区无遮挡A片| 熟女乱论网| 婷婷五月激情中文字幕| 婷婷五月丁香综合亚洲| 天天综合久久| 五月丁香六月香香蕉| 日韩av手机在线观看| 丁香花五月天激情| 五月丁香婷婷成人网| www.激情| 九九99久久| 五月丁香婷婷综合网| 熟妇人妻中文字幕无码老熟妇| 另类激情码| 99思思热只有在这里看| 天堂无码人妻精品AV一区| 高清不卡一区| 久久免费操| 91窝窝| 天天日夜夜夜操操操操| 丁香六月综合激情| 婷婷激情小说网| 婷婷五月激情欧美| 欧美日韩国产伦精品日韩人妻一| 久久精彩视频99| 就99这里只有精品| 99性视频| 日韩免费乱轮网站| 久久这里只精品| 99热碰碰热| 五月婷婷综合在线| 久久人操-久草婷婷-成人AV| 天天搞天天色综合| 伊人超碰在线| 99热6精品| 99视频日韩| 淫荡工a| 久久久天堂国产精品女人| 欧美在线骚货| 少妇搡BBBB搡BBB搡毛茸茸| 五月丁色AV| www五月| 久草五月| 九九色色| 激情婷婷狠狠干| 亚洲精品国产熟女久久久| 六月激情久久婷婷| 精品一二三区久久AAA片| 五月婷婷天天色| 可以看的av| 婷婷五月丁香激情色情| 五月丁香亭亭电影久久| 79色色色色| 色婷婷四虎| 久久五月天婷婷| 丁香婷婷婷五月综合色情| 天天透天天爱| 久99久在线| 色婷婷视频在线| 99er这里只有精品视频| 国产精品天天狠天天看| 99热的无码| 婷婷玖玖丁香| 婷婷99| 99超在线| 五月婷婷精品视频| 日本啪啪网| 久久色频| 六六久久黄色| 五月丁香啪啪综合| 五月天无码视屏播放| 欧美成人精品一区二区| 五月天丁香欧美激情| 久99热在线观看| 色色婷婷五月| 99五月香婷婷丁香在线视频| 夜色综合网| 婷婷五月小说色综合| 欧美日本免费一道免费视频| 九九99视频| 久久人人超| 国产欧美熟妇另类久久久| 天天射色五月天| 九九AV在线| 日本强伦片中文字幕免费看| 天天爽天天操| 日韩黄黄| 五月婷婷深深爱| 国产真人做爰视频免费| 丁香五月婷婷基地| 六月伊人婷婷| 99在线观看精品| 久久精品国产AV一区二区三区 | 五月婷婷导航| 97婷婷丁香五月| 91久久综合亚洲噜噜成人在线| 五月婷婷丁香| 香焦网五月天| 婷婷丁香五月天在线| 天天摸天天肏| 99人人看| 久热一区| 色婷婷久久| 99久久玖玖| 色综合久久五月| 91婷婷五月丁香碰| 色狠狠婷婷| 色婷婷亚洲精品天天综| 夜夜骑天天操| 色综合久久88色综合中文字幕| 一区二区乱码视频| 97婷婷久久丁香| 久久精品一区二区三区四区| 成人精品在线| 综合网啪| 无码人妻一区| 中出内射的人妻视频| 色噜噜综合网| 日韩在线9| 五月婷婷之综合激情在线| 色综合播放| 五月丁香 啪啪| WWW.久久99| 丁香五月天天久久综合小说| 亚洲成av人影院| 这里只有精品在线观看视频| 伊人网大香| 久久五月天婷婷| 久久久久久五月天| 伊人色欲五月天| 欧美天天综合网站上去吧| 久操无码| 99久久网站| 九色七七| xxxx久| 狠狠色五月| 色一情一乱一乱一区9| 久久日婷婷| 久久婷婷青青| 91免费试看| 一本婷婷丁香久久| 五月婷婷激情啪啪| AV在线二十六页| 婷婷综合玖玖五月| 9l久久久视频| 激情九九九九| 五月间天堂综合| 狠狠久综合| 日韩av网站在线观看| 精品一区二区三区三区| 亚洲色图日韩网址| 操97免费超级视频| 久热中文字幕| 婷婷色婷婷亚洲成人| AV九九| 五月天婷婷色在线视频免费观看| 五月丁香久人妻中文| 久久久人妻人伦| 激情五月天婷婷免费观看| 丁香五月激动深爱欧美| 成人日韩欧美| 婷婷色导航| 中文字幕无码人妻少妇免费视频| 搡BBBB搡BBB搡18| 全国最新疫情| 国产午夜精品久久久观看| 韩国天天婷婷| 91AV婷婷| 被强行糟蹋的女人A片| 激情内射人妻1区2区3区| 婷婷综合性爱网| 五月婷丁香久久综合| 大香蕉 伊人夜| 亚洲网视屏| www.夜夜操.con| 久久视频九九视频| 亚洲人成色A777777在线观看| 激情六月天婷婷| 九九视频在线| 在线观看日韩12345区| 伊人久久中文网| 精品婷婷| 五月天艹天天| 五月婷婷亚洲| 亚洲亚洲人成综合网络| 五月天丁香欧美激情| 综合色色婷婷| 亚洲久久婷婷| 久久草中文日韩欧美| 日日爽夜夜爽| www.AV在线| 久热这里只有精品性色AV| 丁香五月天啪啪激情综和网| 色五月超碰| 欧美私人家庭影院| 五月天激情四射网站| 99这里只有免费的精品| 久久性爱视频网站| 日韩精品AV一区二区三区| 五月丁香综合网| jiujiu热在线视频| 夜夜夜夜撸夜夜操| 狠狠操狠狠插| www.久久爱.com| 热热久久久久久久久| 欧美性猛交99久久久99| 风流少妇A片一区二区蜜桃| 97五月天婷婷综合激情网| 五月天婷亚洲综合在线嫩草网| 五月婷婷中文| 欧美三级巜人妻互换| 69久久99精品久久久久婷婷| 操操操操操电影网| 操一操干一干| 99re热在线观看| 五月丁香婷婷中文网| 日韩成人精品中文字幕| 男人天堂AV在线一区二区| 五月丁香在线| 天天肏天天肏天天肏| 色狠狠图片| 九九在线精品| 99日在线视频| 日本狠狠色| 九九色婷婷五月天| 日韩抽插操逼| 天天日,天天干,天天操| 97色色综合| 色偷偷狠狠| 中字幕视频在线永久在线观看免费| 伊人网碰碰| 偷拍五月丁香| 碰人人97| 青青草原福利在线| 极品人妻VIDEOSSS人妻| 综合亚洲色色| 久久99综合| 婷婷激情在线| 人人操人人干AV| 五月丁香六月婷婷的女人| 综合网五月天123| 青草青草视频2免费观看| 婷婷色女| 婷婷综合久久| 丁香五月六月久久综合 | 99超级碰免费视频| 在线视频色五月| 九九热99热| 在线网黄| 337p大胆噜噜噜噜噜91Av| 激情亚洲婷婷| 五月婷婷中文字幕| 亚洲成人高清在线| 99热综合网| 97色在线观看视频| 97精品在线| 激情床戏| 天天干夜夜想| 狠狠草天天草| 亚洲熟妇AV乱码在线观看| 99在线观看视频蜜臀| 桃色五月天| 婷丁香五月天| 久久婷婷七月丁香| 男人的天堂五月丁香| 亚洲影院婷婷色| 91亚洲免费片| 狠狠插狠狠操| 变态另类9| 99色在线视频| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 激情综合色五月丁香六月亚洲| 午夜少妇在线观看视频| 操逼123网| 大香蕉丁香五月| 天天狠狠六月婷丁香影院| 日韩三及成人AV片| 开心五月综合激情网| 99色婷婷| 久久久天堂国产精品女人| 337午夜福利| 色综合久久综合| AA丁香综合激情| 婷婷六月婷婷| 99啪视频在线观看| 五月丁香六月香香蕉| 久久五月天精品视频| 亚洲精品第一色色色色色色| 橾逼网| 丁香五月另类色婷婷麻豆| 婷色五月| 五月婷婷激情视频| 色婷婷综合视频| 久99999热视频在线观看免费| 五月天婷婷无码视频| 夜夜爱伊人| 99只有精品| 丁香激情综合| sesesesezonghe| 五月刺激丁香月综合| 婷婷五月天Av| 五月丁香啪啪啪啪| 色www.con| 99久久综合| 99热这里只有精品搜| 五月婷婷黄色| 依人大香蕉在钱1| 天天噜日日噜综合无码| 狠色狠色狠色狠色狠色网| 五月天丁香看婷婷| 99激情| 色爱亚洲| se色99| 综合性爱网| 欧美性色A片免费免费观看的| 一级黄色操B| 亚洲综合色色色| 婷婷成人五月天成人文学小说| 五月丁香福利| 99热99日天天干| 婷婷激情小说| 色色色热| 婷婷五月天亚洲综合网| 久久久激情| 超碰激情五月| 亚洲无AV在线中文字幕| 欧洲不卡视频| 色综合色色| 欧美va国产va| 黄网在线播放| 欧美、日韩、中文、制服、人妻| 性色做爰片在线观看WW| 亲子乱AV一区二区三区下载| 曰日爽日日操| 天天操天天操| 日日噜人人人做人| 婷婷精品综合| 色色色1网址| 超碰v| 九九九九这里只有精品| 99热在线只有精品| 伊人五月天婷婷| 99这里只有精品国产| 97影院一级片| 免费看片操逼| 99精品久久久久久久久| 成人做爰黄A片免费看直播室男男| 91超级碰碰碰| 九热视频在线精品15| 99精品小视频| 五月草影视| 六月婷色六月| 色五月婷婷激情五月| 色狠狠狠干| 色五月琪琪| 99久精品视频| 99人人干人人| 久久九九99桃花视频| 中文字幕成人日韩| 超级碰 久久9| 六月婷婷日| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 综合色网站| 97偷拍在线视频| 五月天啪啪网| 婷婷天天五月天| www.99精品日操伊人乱碰在线| 99热在线观看| 午夜天堂一区人妻| 免费视频WWW在线观看网站| 综合久久婷婷五月丁香| 97在线视频观看| 激情小说五月天社区丁香| av在线资源| 午夜丁香| 欧美成人无码高清一区二区三区| 丁香五月天在线视频| 五月婷丁香花| 五月丁香婷婷激情在线视频| 欧洲亚洲免费视频9| 天天爱天天做天天舔| 婷婷久久国产视频| 欧美综合婷婷网| 五月天色婷婷基地| 色在线视频网2025| 少妇搡BBBB搡BBB搡毛茸茸 | 天天色丁香| 九九黄色网| 色九九综合| 日韩黄色影院| 久久久婷婷色五月资源网| 91九色中文| 另类激情五月| 香蕉婷婷色五月| 亚洲 在线 性爱 | 精品一二三区久久AAA片| 亚洲乱码日产精品BD| 五月天另类小说久久小说网| 亚洲婷婷激情综合激情999精品| 狼人婷婷综合| 婷婷五月天视| 丁香五月六月婷婷殴美综合| 亚洲熟妇无码乱子AV电影| 99色在线| 91打屁股免费看| www.久9| 日韩啪啪网| 激情五月婷婷伊人| 丁香婷婷影院| 婷婷五月婷婷| 婷婷激情五月天桃花网| 五月天天综合| 婷婷五月丁香综合激情小说| 色永久| 99久久99久久综合| 日韩一级一片内射视频4K| 97操碰人人| 天天爽成人综合网站| 97色婷婷五月天| 亚洲欧洲国产精品| 国产熟妇乱子伦hd| 日本成人综合| 天天激情夜夜干| 九九热精品视频在线观看| 99在线免费视频| 九九99偷拍视频| 2015好吊操| www五月天com| 五月激情啪啪| 91免费看片| 丁香激情五月天| 探花搜索结果 - 黄上黄| 五月丁香色婷婷伊人| 婷婷激情社区| 狠狠干,狠狠操| 99婷婷五月天激情| 一區四區歐美日韓| 国产欧美第五十五页| 9 7总站超级碰免费视频| 婷婷五月天堂| 激情五月,婷婷五月,丁香五月| 狠狠综合| 91精品国产综合久久蜜芽解析速度| 五月婷婷在线丁香| 99精品视频免费观看| 丰满少妇乱A片无码| 五月丁香自拍| 这里精品| 少妇性BBB搡BBB爽爽爽视頻| 超碰在线国产| 人人操AV| 91五月花丁香| 桔色成人官方网站| 婷婷五月成人| 激情五月综合第一页| 狠狠狠狠狠草| 亚洲人妻av伦理| 婷婷久久五月| 亚洲婷婷欧美婷婷| 超碰妻人人| 久久久五月激| 九九久久综合| 久操热| 五月婷婷亚洲| 狠狠综合色网| 婷婷五月天欧美| 丁香五月之久操视频| 国内婷婷丁香社区在线播放| 色九九综合| 97在线/亚洲| 亚洲熟妇无码乱子AV电影| 中文字幕不卡网站| 色婷婷五月天在线| 91 影音先锋| 日本特黄aaaaa| 亚洲激情综合| 久久五月丁香伊人青草| 丁香五月社区| 婷婷丁香射射| 直接看的AV| 91天天操天天干天天射| 国产成人av在线播放| 狼人婷婷久久| 伊人玖玖网| h亚洲| 五月天成人在线播放| 影音先锋 一区| 综合网天天| 二级黄色毛片| 丁香蜜臀黄色婷婷五月天| 六月撸婷婷| 97碰碰人人| 色五月综合激情| 99re思思热久久| 狠狠色丁香五月婷巨| 五月色婷婷综合| 激情色中文| 99热官网| 五月色精品| 超碰五月婷婷五月天| 久久人妻伊人| 99碰视频| 婷婷的99视频网站| 国产伦理精品高清在线观看网站一区二区 | 被强行糟蹋的女人A片| 婷婷丁香激情五月| 青吴乐视频| 久久免片| 大香蕉五月婷婷| 色播五月丁香| xx色综合| 亚洲av另类在线观看| 六月丁香综合| 9福利性视频欧美| 五月婷婷大香蕉| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 六月丁香激情最新更新| 一本色道久久88加勒比| 婷婷五月天激情五月天网站| 婷婷丁香六月天| 天天天天操| 欧美私人家庭影院| 五月婷婷啪啪啪啪| 超碰日日操| 日本综合色图| 九九精品视频在线观看| 97色天堂| 国产精品99久久久久久久女警| 开心五月激情婷婷| 狠狠狠狠狠狠色| 国产精产国品一二三在观看| 婷婷干五月综合在线播放| 大香蕉久久久| BBWCUCKOLD精品熟妇| 色五月激情五月天| 啪啪一区| 老师高潮流白浆喷水的A片| h在线看免费版在线看| 99热综合在线| 婷婷94s| 五月激情婷婷在线| 26uuu亚洲精品国产| 深夜男女福利刺激影院一区完整| 97在线观视频免费观看| 久久精彩视频| 激情综合五月.....| 久久婷婷人人| 亚洲欧洲中文日韩久久AV乱码| 丁香综合婷婷五月天| 综合亚洲五月天| 98色丁香五月婷婷综合网| 色情综合网| 九九热精品| 襙逼网| 九九热九九| 五月天另类小说久久小说网| www.婷婷五月| 五月婷婷在线免费| 夜夜噜夜夜奇| 99久在线观看| 91啦丨九色丨刺激中文| 天天日天天干天天操| 五月天国产| 最新激情五月天| 五月婷在线影院| 丝袜熟女一区二区三区| 超碰国产在线| 色色色婷| 五月婷婷欧美激情| 色久在| 99日韩| 丁香五月综合首页| 色色婷婷综合| 色色婷| 欧洲亚洲免费视频9| 婷婷久久亚洲| 99热这里只有精品23| 综合激情伊人影视在线| 色色色区| 9精品一区| 激情五月天久久| 激情五月婷婷| 五月天大香蕉| 99热1| 五月天色婷婷综合| 婷婷五月丁香综合人妻| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 99热精品观看| 色爱终和网| 激情丰满熟妇五月| 天天舔天天插天天爱| 狠狠干综合网| 国产肏屄大片| AVV黄| 五月天婷婷无码| 色色婷婷综合| 日韩av变天就操逼不卡区| 久久久18| 97人人超| 91操人| 久操大香蕉| 六月丁香五月婷婷| 色五月激情网| www.色婷婷.com| 久久免片| 五月婷婷色五月| 97色婷婷| 婷婷五月六月丁香| 激情五月天 婷婷| 丁香五月欧美| 综合激情五月天| 色综合久久久久| 色色色欧美| 久青草影院| 国产精品美女久久久久AV超清| 丁香五月天啪啪| 婷婷成人五月天| 亚洲乱码日产精品BD| 麻豆AV一区二区三区| 九九在线热九九在线热99热| 成人做爰高潮A片免费视频| http:色情日本com| 亚洲精品国产A久久久久久| 九九九九精品精| 午夜微拍福利| 久久人视频| 操久久精| www.超碰在线| 天天看片日日夜夜| 五月天全国最大成人网| 国语精品探花| 色婷婷电影网| 久久久中文| 国产毛多水多女人A片| 啪啪日热| 久久狠婷婷| 超碰成人免费| 激情五月天综合图片小说网站| 婷婷五月天视频在线观看| 婷婷五月深爱五月| 永久免费一区二区三区| 色屌丝中文字幕| 国产午夜精品一区二区三区四区| 丁香花综合永久入口| 97超级操操| 九九無碼| 五月婷婷婷婷婷婷艺术| 国产在这里只有精品| www久| 天天色综网| 成人短视频免费观看| AV九九| 人人做人人看人人摸| 婷婷五月婷婷| 丰满人妻一区二区三区| 99综合97| 久综合| 色五月亚洲五月天| 热99这就是精品视频| 综合色情网| 亚洲乱码日产精品BD| 欧美VA视频| 99热思思在线观看| 99热这里只有精品中文字幕| 九月婷婷综合| 伊大人久久| 五月婷婷啪啪啪| 五月丁香婷婷啪啪综合网| 99玖玖在线视频| 成人无码精品1区2区3区免费看| 中文字幕五月久久婷婷| 久久中文人妻系列| 777色色色| 五月丁香色婷婷| 六月色婷婷综合影视| 色色综合色视频| 开心激情网五月天| 99热在线播放| 哇嘎成人久久| 人人色AV| 色婷婷狠狠爱| 五月天激情亚洲| 婷婷欧美激情综合| 亚洲色五月| 色婷婷五月天av在线| 色9999日韩国产| 婷婷久久色| 国产婷伊人| 婷婷色激情网| 天天拍天天操| 五月天开心色色网| 色婷婷五月天中文字幕| 天天天天操| 国av网| 狠狠va| 久久九九综合| 九九综合网色全集 | 丁香六月婷婷久久亚洲天堂| 79亚洲精品少妇| 色狠狠综合网| www.色情五月天.com| 天天操天天操天天操| 四色五月婷婷| 人人操插| 天天做天天爱天天高潮| 久草 tingting| 插插插色综合网| 天天日天天插| 国产激情视频在线观看| 五月天色五月| AV网址大全在| 精品皮股午夜AV| 激情久久久| 久久这里都是精品免费| 91人人操人人| 国产激情在线| 亚洲婷婷五月天激情| 婷婷五月天av小说| 激情久久天天| 极品人妻VIDEOSSS人妻| 久久婷婷六月| 天天影院色| 色五月婷婷久久| 亚洲99综合| 色99在线视频| 亲子乱AV一区二区三区下载| 五月色亚洲| 免费看欧美成人A片无码| 婷婷五月六月丁香| 五月婷婷五月丁香| 色婷婷最新域名| 久久久久久丁香五月| 丁香六月婷婷操逼网| 丁香六月天婷婷开心综合| 中文字幕有多少字| 亚洲乱码成人| 丁香情色五月| 亚洲噜色| 99热欲| 九九99久久| 99在线视频免费| 色综合九九色综合88| 九九婷婷综合| 激情久久久| jiujiu无码五区| 丁香婷婷老熟女综合网| 这里只有精彩视|