本次作業參考潘老師的部落格
github傳送門
命令列實用程式開發基礎
本次作業主要是編寫乙個命令列程式,處理標準輸入或者文字檔案。程式的要求主要參考、
對於命令列程式,首先要做的就是解析命令列傳入的引數,例如執行程式
./selpag -s 1 -e 1 input.txt
對於這個命令,我們這個程式應該要至少有三個變數,乙個記錄-s後的1,乙個記錄-e後的1,乙個記錄input.txt。
傳入的引數是命令列程式最重要的東西。解析可以使用os庫里的os.args,但是這很麻煩。
所幸已經有前人幫我們完成解析引數的工作,那就是使用flag或者pflag庫。這兩個庫的使用可以參考
在命令列輸入以下**獲得pflag包,而flag包不用獲取
go get github.com/spf13/pflag
由於老師要求使用pflag,這裡給出pflag簡單的**使用,例如對於intvarp,五個引數分別是,變數的位址,長名,短名,預設值,幫助時的語句。
對於傳入的引數,以下兩種情況是等價的,它們都會把page_len賦值為11。flag.
intvarp
(&page_len ,
"l",
"l",72,
"page length"
) flag.
boolvarp
(&help ,
"h",
"h",
false
,"show help"
) flag.
stringvarp
(&print_dest ,
"d",
"d","",
"print detination"
)
將變數名和傳入的引數繫結後,使用parse就可以解析了,注意不要忘了,否則忘了解析各變數的值都是預設的。./selpage -l 11
./selpage -l=11
./selpage --l 11
./selpage --l=11
flag.parse()
對於傳入的前面是『-』的引數,可以用pflag提前繫結好變數,但是這次傳入的檔名引數,前面是沒有『-』的,這裡只要注意 pflag 會把不能解析的引數都放在args()陣列裡面,因此呼叫flag.args()[0]就可以獲得第乙個沒被解析成flag的引數,也就是檔名。
在實現要求中,展示了程式在命令列中搭配』<』 , 『>』 , 『|』 符號的操作,我對命令列的操作並不是太熟悉,開始還很奇怪為什麼輸入之後用pflag解析不了。
後來發現這些符號的效果並不需要我們實現,它們是linux命令列自帶的效果,和『&』符號一樣。
本部分參考
在本次作業中,需要在程式裡執行乙個命令列的命令lp,因此要用到os/exec包,簡要的**如下。
exec.command後面的傳入的引數就是命令列要執行的命令還有引數,例如想執行「cat tmp.txt「,就應該傳入"cat"和 「tmp.txt」,簡單來說就是將空格分開的部分分別寫進去。
然後cmd.stdinpipe()就是lp命令的輸入管道,lp的輸入接受本程式的輸出。
然後後面cmd.start執行命令列程式。
如果3秒後還沒執行完,進行終止。
還記得老師布置作業的時候說這次作業很簡單,很快就能寫完,但是在國慶的時候我花了好幾天才寫完,光是文件都看了好久。最主要的問題還是對linux命令列很多東西都不是太熟悉,還有第一次寫go程式也不太熟練的緣故。cmd = exec.
command
("lp"
,"-d"
, print_dest)
fout, err = cmd.
stdinpipe()
if err !=
niloutputfile
(inputfile , fout)
fout.
close()
cmd.stdout = os.stdout
cmd.stderr = os.stderr
err = cmd.
start()
if err !=
nil timer := time.
afterfunc(3
*time.second,
func()
) err = cmd.
wait()
timer.
stop
()
Linux服務命令列
linux命令列 方法一 建立全域性可執行指令 ln s home 可執行檔案 usr local bin 重新命名 兩個都必須是絕對路徑 服務開機自啟動 前提 新增全域性可執行指令 chkconfig 服務名 on 若想關閉,將on改為off方法二 建立全域性可執行指令 修改.bash profi...
linux命令列計算器
下面總結linux下的三個命令,來介紹一下linux下的計算方法 1 bc bc在預設的情況下是個互動式的指 令。在bc工作環境下,可以使用以下計算符號 加法 減法 乘法 除法 指數 餘數 一行輸入多個計算,用 相隔 quit 退出 scale 3 設小數字 不進行互動而直接計算出結果 echo s...
Linux命令列(3) pwd 命令
linux中用 pwd 命令來檢視 當前工作目錄 的完整路徑。簡單得說,每當你在終端進行操作時,你都會有乙個當前工作目錄。在不太確定當前位置時,就會使用pwd來判定當前目錄在檔案系統內的確切位置。目錄 1 命令格式 2 命令功能 3 常用引數 4 常用例項 pwd 選項 檢視 當前工作目錄 的完整路...