yes命令似乎太簡單,沒有任何實際用途,但是在本教程中,我們將向您展示它的應用程式,以及如何從Linux和macOS中被壓抑的積極性中獲益。
yes命令是Linux和macOS等類似Unix的作業系統中最簡單的命令之一。簡單,我們指的是簡單的使用和初始實現。在system7unix中釋出的原始版本的原始碼由kenthompson編寫,總共只有六行程式碼。
但不要因為它是一個簡單的小命令就把它一筆勾銷。它可以用在一些有趣和有用的方式。
在沒有任何命令列引數的情況下使用yes命令,其行為就像您鍵入“y”並反覆(反覆)按Enter鍵一樣。很快。它將繼續這樣做,直到您按Ctrl+C來中斷它。
yes事實上,yes可以用於重複生成您選擇的任何訊息。只需鍵入yes、空格和要使用的字串,然後按Enter鍵。這通常用於使yes生成“yes”或“no”字串的輸出流。
yes yesyes的輸出可以透過管道傳輸到其他程式或指令碼中。
這聽起來熟悉嗎?你開始了一個漫長的程序,然後走開,讓它繼續執行。當你回到你的電腦,這個過程還沒有完成。在你不在的時候,它會問你一個問題,然後坐在那裡等待“是”或“否”的回答。
如果你事先知道你所有的回答都是肯定的(“是”或“y”)或否定的(“否”或“n”),你可以用“是”為你提供這些回答。然後,您的長流程將在無人值守的情況下執行到完成,併為流程提出的任何問題****。
請看下面的bashshell指令碼。(我們需要設想,這是一個更大的指令碼的一部分,需要相當長的時間才能執行。)
#!/bin/bash # ... # in the middle of some long script # obtain a resp***e from the user # ... echo "Are you happy to proceed? [y,n]" read input # did we get an input value? if [ "$input" == "" ]; then echo "Nothing was entered by the user" # was it a y or a yes? elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then echo "Positive resp***e: $input" # treat anything else as a negative resp***e else echo "negative resp***e: $input" fi此指令碼提出一個問題並等待響應。指令碼中的邏輯流由使用者的輸入決定。
要對此進行測試,請將指令碼複製到一個檔案中,並將其儲存為long_指令碼.sh。使用chmod使其可執行。
chmod +x long_script.sh使用以下命令執行指令碼。嘗試提供“是”、“y”和其他任何輸入,包括在不輸入文字的情況下按Enter鍵。
./long_script.sh要獲得yes以提供我們對指令碼問題的響應,請將yes的輸出透過管道傳輸到指令碼。
yes | ./long_script.sh有些指令碼的要求更加嚴格,只接受完整的“是”字作為肯定的回答。您可以提供“yes”作為yes的引數,如下所示:
yes yes | ./long_script.sh你需要確定你將要輸入到指令碼或程式中的輸入肯定會給你預期的結果。要做出決定,你必須知道問題和你的回答。
指令碼、命令或程式中的邏輯可能與您的期望不匹配。在我們的示例指令碼中,問題可能是“您希望停止嗎?如果是這樣的話,否定的回答會讓指令碼繼續。
您必須熟悉指令碼、命令或程式,然後才能輕鬆地將“是”引入其中。
在初期,yes將與其他Linux命令一起使用。從那時起,大多數其他Linux命令都有自己的執行方式,無需人工互動。實現這一目標不再需要“是”。
讓我們以Ubuntu包管理器apt-get為例。要安裝應用程式而不必在安裝過程中按“y”,應按以下方式使用“是”:
yes | sudo apt-get install fortune-mod使用apt get中的-y(假設是)選項可以獲得相同的結果:
sudo apt-get -y install fortune-mod你會發現apt-get甚至沒有像往常那樣問“你想繼續嗎?[是/否]“問題。它只是假設答案是“是的”
在其他Linux發行版上,情況也是如此。在Fedora上,您可能曾經使用過這種型別的包管理器命令:
yes | yum install fortune-moddnf包管理器已經取代了yum,並且dnf有自己的-y(假設是)選項。
dnf -y install fortune-mod這同樣適用於cp、fsck和rm。這些命令都有自己的-f(force)或-y(假設是)選項。
那麼“是”似乎被降級為只處理指令碼了嗎?不完全是。這隻老狗還有幾招呢。
您可以將yes與seq生成的數字序列一起使用,以控制重複操作的迴圈。
這一行將生成的數字回顯到終端視窗,然後呼叫sleep一秒鐘。
您可以呼叫另一個命令或指令碼,而不是簡單地將數字回顯到終端視窗。該命令或指令碼甚至不需要使用數字,它們只用於啟動迴圈的每個週期。
yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done有時有一個大檔案來測試是有用的。也許你想練習使用zip命令,或者你想有一個相當大的檔案來測試FTP上傳。
您可以使用yes快速生成大型檔案。你所需要做的就是給它一個長的文字字串,並將輸出重定向到一個檔案中。別搞錯了,那些檔案會迅速增長的。準備在幾秒鐘內按Ctrl+C。
yes long line of meaningless text for file padding > test.txt ls -lh test.txt wc test.txt這裡生成的檔案在用於研究本文的測試機器上花費了大約5秒鐘。ls報告它的大小是557mb,wc告訴我們其中有1240萬行。
我們可以透過在命令字串中包含head來限制檔案的大小。我們告訴它檔案中要包含多少行。-50意味著頭部只允許50條線穿過測試.txt檔案。
yes long line of meaningless text for file padding | head -50 > test.txt只要有50行測試.txt檔案,程序將停止。您不需要使用Ctrl+C,它會根據自己的意願優雅地停止。
wc報告說,檔案中正好有50行,400字,大小為2350位元組。
即使它對於將響應輸入到長時間執行的指令碼(以及其他一些技巧)仍然很有用,yes命令也不會成為日常命令工具箱的一部分。但是當你真的需要它的時候,你會發現它本身就是簡單的,而且有六行黃金程式碼。
... 不尋常的是,您會被提示同意Microsoft EULA(以下是如何理解EULA)。現在,這是一個令人毛骨悚然的地方:你可能對此有保留。儘管這些TrueType字型(不同於OpenType字型)已經免費提供,但您會注意到它們不是開源的。此外...
...不要擔心。有幾種方法可以用來恢復它。我們將向您展示如何在Windows中重置管理員密碼。 ...
...Linux的初學者友好版本,但這並不意味著Ubuntu只供初學者使用。高階使用者還可以利用Ubuntu提供的一些強大功能。 ...
...可以選擇使用裝置RAM進行臨時讀/寫檔案儲存。當您決定如何使用非常小的web伺服器時,您可能需要更改這一點。 ...
為您的電視和電影收藏設計終極媒體伺服器可能是一項挑戰。你應該使用什麼硬體,你應該安裝什麼作業系統,你應該執行什麼樣的軟體? ...
...虧了Windows PowerShell,您可能不再需要膩子了。讓我們看看如何在windows10中設定SSH訪問,以及新工具是否可以取代PuTTY。 ...
...ali Linux提供了擴充套件道德駭客技能所需的一切。下面是如何將Kali Linux載入到Raspberry Pi 3上的。 ...
... 無論您是Python程式設計新手還是專家,讓我們來看看您如何在Android裝置上充分發揮pydroid3的潛力。 ...
... 許多Linux伺服器執行Ubuntu。那麼,讓我們看看如何在Ubuntu伺服器上設定FTP伺服器。 ...