get-host-ip
這是一款用rust
制作的命令行工具。其被設(shè)計(jì)用來(lái)從C:WindowsSystem32ipconfig.exe
的執(zhí)行結(jié)果內(nèi)提取出指定【網(wǎng)卡】的屬性值。比如,從電腦本的【無(wú)線局域網(wǎng)適配器WLAN
】中提取出【IPv4
地址】字符串值。
使用場(chǎng)景
從Windows Subsystem for Linux
(比如,Ubuntu-20.04
)讀取其宿主主機(jī)(比如,Windows 11
)無(wú)線物理網(wǎng)卡的IP
地址。進(jìn)而,將其作為兩項(xiàng)重要功能的配置項(xiàng)入?yún)ⅲ?/p>
-
投影
WSL2
圖形界面至Windows
宿主桌面系統(tǒng)顯示。
-
無(wú)論是將整個(gè)
Gnome
桌面系統(tǒng)投影作為Windows
環(huán)境下的一個(gè)應(yīng)用程序窗口,還僅只是投影某個(gè)Linux GUI
應(yīng)用程序,X11 Server
都需要借助$DISPLAY
環(huán)境變量明確地知曉XSTATA
的準(zhǔn)確IP
位置。請(qǐng)不要自做聰明地認(rèn)為127.0.0.1
可能搪塞過(guò)去。127.0.0.1
是指向WSL2
子系統(tǒng)自身,而不是宿主主機(jī)。 -
關(guān)于
WSL2
桌面投影的更多技術(shù)細(xì)節(jié),可參見(jiàn)我早先的另一篇文章為 Rust+QT 編程搭建【偽】win32 開(kāi)發(fā)環(huán)境。還算是詳細(xì)吧!
-
使
Windows
宿主操作系統(tǒng)共享VPN
客戶(hù)端給WSL2
子系統(tǒng)。
-
從操作上,執(zhí)行
export HTTP_PROXY=***
指令要比在Linux
系統(tǒng)里安裝與配置另一個(gè)Clash
實(shí)例要省心多了。 -
從后續(xù)維護(hù)上,對(duì)
VPN
客戶(hù)端的軟件升級(jí)與配置更新僅需要做一遍操作更節(jié)省時(shí)間。 -
從經(jīng)濟(jì)上,更少的在線客戶(hù)端數(shù)量也更便宜。
曾經(jīng)的糾結(jié)
早先我也曾經(jīng)使用nodejs
腳本程序?qū)崿F(xiàn)了相同的功能。但,node
虛擬機(jī)首次啟動(dòng)時(shí)間著實(shí)有些長(zhǎng)了。雖然該長(zhǎng)延時(shí)弊端在交互式bash
上下文中并不明顯(畢竟咱敲鍵盤(pán)也不快,還時(shí)不時(shí)地敲錯(cuò)字母),但當(dāng)被置于.bashrc
內(nèi)執(zhí)行時(shí),其造成的shell
會(huì)話初始化阻滯就讓人有點(diǎn)不好接受了(畢竟,每次開(kāi)個(gè)新shell
窗口都得明顯黑幕個(gè)把秒鐘,體驗(yàn)著實(shí)有些兒差)。所以,我決心使用rust
重構(gòu)此“熱”指令。效果明顯,幾乎一閃便可完成shell
初始化。
命令行指令-用法
$ get-host-ip --help 獲取 wsl 宿主機(jī)器的物理 IP 地址 Usage: get-host-ip [OPTIONS] Options: -s, --section
更詳細(xì)圖例
返回結(jié)果
get-host-ip
執(zhí)行輸出就是沒(méi)有結(jié)尾換行符的IP
地址字符串。若將該指令添加入$PATH
,那么在Shell
求值表達(dá)式內(nèi)可以直接
export HOST_IP=$(get-host-ip);
鏈接庫(kù)依賴(lài)
因?yàn)?code style="background:rgb(251,241,199);font-family:'Source Code Pro', 'Fira Code', Menlo, Monaco, Consolas, 'DejaVu Sans Mono', Inconsolata, 'Courier New', monospace;">Windows cmd指令輸出文本內(nèi)容的字符集是cp936
,而不是UTF-8
。所以,get-host-ip
需要依賴(lài)操作系統(tǒng)預(yù)置的字符集轉(zhuǎn)換動(dòng)態(tài)鏈接庫(kù)libiconv
,來(lái)完成cp936 -> UTF-8
的字符集轉(zhuǎn)換。
Linux
操作系統(tǒng)
大部分主流Linux OS
都包含有libiconv
。若你的Linux OS
版本比較早或是compact
版而缺失了libiconv
也不必慌。按如下方式補(bǔ)裝即可:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.1.tar.gz tar -xzvf libiconv-1.9.1.tar.gz cd libiconv-1.9.1.tar.gz ./configure --prefix=/usr/local sudo make -j8 sudo make install sudo ln -s /usr/local/lib/libiconv.so /usr/lib/libiconv.so sudo ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
Windows
操作系統(tǒng)
要么,從setup直接下載安裝包,并本地安裝之。缺點(diǎn)就是會(huì)“污染”你的PATH
環(huán)境變量。
要么,從binary下載預(yù)編譯包。在解壓縮之后,將其下的bin
目錄添加到你的編譯環(huán)境變量RUST_FLAGS
內(nèi)。比如,
set RUST_FLAGS=-L C:libiconv-1.9.2-1-binbin
吐槽
同一款libiconv
鏈接庫(kù)怎么對(duì)Linux
與Windows
操作系統(tǒng)提供了不同名的導(dǎo)出函數(shù)呢?這個(gè)“缺德的”命名差異導(dǎo)致我在【編譯期·動(dòng)態(tài)鏈接】環(huán)節(jié)卡住了好幾天。相對(duì)于Linux
版的鏈接庫(kù)導(dǎo)出函數(shù)名,Windows
版的每個(gè)導(dǎo)出函數(shù)都有一個(gè)lib
前綴 —— 故意的吧?真要命。
審核編輯 :李倩
-
命令
+關(guān)注
關(guān)注
5文章
737瀏覽量
22869 -
腳本
+關(guān)注
關(guān)注
1文章
398瀏覽量
28447 -
Rust
+關(guān)注
關(guān)注
1文章
234瀏覽量
7087
原文標(biāo)題:get-host-ip
文章出處:【微信號(hào):Rust語(yǔ)言中文社區(qū),微信公眾號(hào):Rust語(yǔ)言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
在STM32實(shí)現(xiàn)命令行
Linux命令行工具
caxa命令行中的應(yīng)用
監(jiān)控jvm常用的5個(gè)命令行工具

Xilinx軟件命令行工具:XSCT開(kāi)發(fā)和調(diào)試
Xilinx軟件命令行工具進(jìn)行開(kāi)發(fā)和調(diào)試
Golang基于flag庫(kù)實(shí)現(xiàn)一個(gè)命令行工具
用于解析和操作URL的命令行工具
介紹Go里面經(jīng)常使用到的命令行工具

PetaLinux工具文檔:命令行參考指南

HarmonyOS開(kāi)發(fā):【基于命令行(安裝庫(kù)和工具集)】

評(píng)論