diff --git a/quests/create/answer.sh b/quests/create/answer.sh new file mode 100644 index 0000000..b0367e1 --- /dev/null +++ b/quests/create/answer.sh @@ -0,0 +1,12 @@ +echo start +ls +touch hello.txt +ls +cat hello.txt +touch world.txt +ls +mkdir notes +ls +cd notes +touch note.txt +ls \ No newline at end of file diff --git a/quests/create/game.yml b/quests/create/game.yml new file mode 100644 index 0000000..e9ec693 --- /dev/null +++ b/quests/create/game.yml @@ -0,0 +1,206 @@ +id: create +title: 建立檔案與資料夾 +image: base +instruction: | + 在這個關卡中,你將會學到: + 1. 如何使用 `touch` 建立檔案 + 2. 如何使用 `mkdir` 建立資料夾 + +requirements: + - tab + +stages: + - id: start + name: 按下 `開始` 按鈕開始 + condition: + command: echo start + response: + content: | + 這次要學習的指令是 `touch` 指令。 + 請你先用 `ls` 指令查看目前所在資料夾中有哪些檔案。 + 你應該會發現目前所在資料夾中沒有任何檔案。 + hint: 輸入 `ls` 指令來查看目前所在資料夾中有哪些檔案 + + - id: ls + name: 查看資料夾中的檔案 + requirements: + - start + condition: + command: ls + response: + content: | + 你應該可以看到終端機上沒有任何回應,這表示目前所在資料夾中沒有任何檔案。 + 而我們可以使用 `touch [檔案名稱]` 指令來建立一個檔案。 + 接下來,請你試著在終端機上建立一個檔案,檔名為 `hello.txt`。 + hint: 輸入 `touch hello.txt` 來建立一個檔案 + + - id: touch + name: 使用 `touch` 指令來建立一個檔案 + requirements: + - ls + condition: + files: + - path: /home/commander/hello.txt + type: file + exists: true + exceptions: + - id: missing_extension + condition: + files: + - path: /home/commander/hello + type: file + exists: true + response: + content: | + 你似乎忘記輸入副檔名 `txt` 了。 + 請再試一次,並確保檔名為 `hello.txt`。 + response: + content: | + 你應該可以看到終端機上沒有任何回應。 + 然而實際上 `touch` 指令已經成功建立了一個檔案。 + 請你用之前學過的 `ls` 指令來查看目前所在資料夾中有哪些檔案。 + hint: 輸入 `ls` 指令來查看目前所在資料夾中有哪些檔案 + + - id: ls-touch + name: 使用 `ls` 指令來查看新建立的檔案 + requirements: + - touch + condition: + command: ls + output: hello.txt + response: + content: | + 你應該可以看到終端機上顯示了 `hello.txt` 這個檔案。 + 我們來看看 `hello.txt` 檔案的內容吧! + 我們可以使用之前學過的 `cat` 指令來查看檔案內容。 + hint: 輸入 `cat hello.txt` 來查看 `hello.txt` 檔案的內容 + + - id: cat + name: 使用 `cat` 指令來查看 `hello.txt` 檔案的內容 + requirements: + - ls-touch + condition: + command: cat hello.txt + response: + content: | + 咦?竟然什麼都沒有! + 沒錯,使用 `touch` 指令建立的檔案是空的。 + 我們在未來會學習如何編輯檔案的內容。 + 再來試試建立其他的檔案吧! + 請你試著在終端機上建立另一個檔案,檔名為 `world.txt`。 + hint: 輸入 `touch world.txt` 來建立一個檔案 + + - id: touch-2 + name: 使用 `touch` 指令來建立另一個檔案 `world.txt` + requirements: + - cat + condition: + files: + - path: /home/commander/world.txt + type: file + exists: true + exceptions: + - id: missing_extension + condition: + files: + - path: /home/commander/world + type: file + exists: true + response: + content: | + 你似乎忘記輸入副檔名 `txt` 了。 + 請再試一次,並確保檔名為 `world.txt`。 + response: + content: | + 非常好,你已經成功建立了第二個檔案。 + 接下來,請你用之前學過的 `ls` 指令來查看剛剛建立的兩個檔案。 + hint: 輸入 `ls` 指令來查看目前所在資料夾中有哪些檔案 + + - id: ls-2 + name: 使用 `ls` 指令來查看剛剛建立的兩個檔案 + requirements: + - touch-2 + condition: + command: ls + output: hello.txt\nworld.txt + response: + content: | + 你應該可以看到終端機上顯示了 `hello.txt` 和 `world.txt` 這兩個檔案。 + 接下來,我們來試試看建立資料夾吧! + `mkdir` 指令可以建立一個空的資料夾。 + 使用方式是 `mkdir [資料夾名稱]`。 + 請你試著在終端機上建立一個資料夾,名稱為 `notes`。 + hint: 輸入 `mkdir notes` 來建立一個資料夾 + + - id: mkdir + name: 使用 `mkdir` 指令建立 `notes` 資料夾 + requirements: + - ls-2 + condition: + files: + - path: /home/commander/notes + type: directory + exists: true + response: + content: | + 非常好,你已經成功建立了 `notes` 資料夾。 + 接下來,請你用 `ls` 指令來查看剛剛建立的資料夾。 + hint: 輸入 `ls` 指令來查看目前所在資料夾中有哪些檔案 + + - id: ls-mkdir + name: 使用 `ls` 查看剛建立的資料夾 + requirements: + - mkdir + condition: + command: ls + output: notes + response: + content: | + 你應該可以看到終端機上顯示了 `notes` 這個資料夾。 + 接下來,我們要在 `notes` 資料夾中建立一個 `note.txt` 的檔案。 + 首先,我們要先進入 `notes` 資料夾。 + 還記得之前的 `cd` 指令嗎?請你試著使用 `cd` 指令來進入 `notes` 資料夾。 + hint: | + 輸入 `cd notes` 來進入 `notes` 資料夾 + 可以在輸入到 `cd n` 時按下 `Tab` 鍵來自動補齊資料夾名稱 + + - id: cd-notes + name: 移動到 `notes` 資料夾 + requirements: + - ls-mkdir + condition: + pwd: /home/commander/notes + response: + content: | + 你已經成功進入了 `notes` 資料夾。 + 接下來,請你試著在 `notes` 資料夾裡建立一個檔案,檔名為 `note.txt`。 + hint: 輸入 `touch note.txt` 來建立一個檔案 + + - id: touch-note + name: 在 `notes` 中建立 `note.txt` 檔案 + requirements: + - cd-notes + condition: + files: + - path: /home/commander/notes/note.txt + type: file + exists: true + response: + content: | + 非常好,你已經成功建立了 `note.txt` 檔案。 + 跟之前一樣,你可以使用 `ls` 指令來查看目前所在資料夾中有哪些檔案。 + hint: 輸入 `ls` 指令來查看目前所在資料夾中有哪些檔案 + + - id: END + name: 使用 `ls` 指令來查看目前所在資料夾中有哪些檔案 + requirements: + - touch-note + condition: + command: ls + output: note.txt + response: + content: | + 你應該可以看到終端機上顯示了 `note.txt` 這個檔案。 + 恭喜你完成了這個關卡! + 在下一個關卡中,你將學習如何複製檔案與資料夾。 + hint: 恭喜你完成了所有任務! diff --git a/quests/tab/game.yml b/quests/tab/game.yml new file mode 100644 index 0000000..e851ab4 --- /dev/null +++ b/quests/tab/game.yml @@ -0,0 +1,174 @@ +id: tab +title: Tab 自動補全 +image: base +instruction: | + 在這個關卡,你將會學到 + + 1. 如何使用 Tab 自動補全路徑 + 2. 出現衝突時如何處理 + + 按下中間的按鈕來開始這個關卡。 + +requirements: + - read + +stages: + - id: start + name: 按下開始按鈕開始關卡 + condition: + command: echo start + response: + content: | + 在終端機裡,所有的操作都是用文字進行。 + 然而,打字很花時間,而且只要一個字打錯,指令就會執行失敗。 + 因些終端機提供「自動補全」的功能,自動幫你完成檔案路徑、指令名稱、參數名稱,節省你的時間,也避免輸入錯誤。 + + 在開始練習之前,我們先來看看家目錄下有哪些檔案。 + hint: 使用 `ls` 查看檔案列表 + + - id: ls + name: 使用 `ls` 查看檔案列表 + requirements: + - start + condition: + command: ls + response: + content: | + 你看到了這個資料夾中充滿了超級長和有錯字的檔案名稱,如果這些都要我們一個一個字輸入,肯定會很痛苦。 + 但不要緊,只要使用自動補全,檔名不論多長都能輕鬆輸入。 + + 使用自動補全的方法是,**先輸入部分的檔名,再按下 Tab** + (Tab 是 Q 左邊的按鍵) + 例如要補全 `SuperSecretPlansForWorldDomination.txt`,你可以先輸入 `Su` 再按下 Tab,終端機就會幫你打完剩下的檔名了。 + + 我們試看看印出 `SuperSecretPlansForWorldDomination.txt` 這個檔案的內容。 + hint: | + 使用 `cat SuperSecretPlansForWorldDomination.txt` 來印出檔案內容 + 在輸入 `cat Su` 之後按下 Tab 來自動補全檔名,完成後按 Enter 就能執行指令 + + - id: cat_super_secret + name: 使用 `cat` 印出 SuperSecretPlansForWorldDomination.txt 的內容 + requirements: + - ls + condition: + pwd: /home/commander + command: cat SuperSecretPlansForWorldDomination.txt + response: + content: | + 你看到了終端機自動幫你補全了 `SuperSecretPlansForWorldDomination.txt`,就算是很長的檔名,也不用怕打錯字。 + 開頭不論你打了幾個字都無所謂,你可以只打 `S`、`Su`、`Sup`、`Super` 或甚至完全不打字都沒關係。 + 但是你打的字越少,就越容易跟其他的檔案重複,這時候就要做衝突處理。 + 關於衝突處理,我們會在待會練習。 + + 自動補全也可以用來對付拼字錯誤,像是 `ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt` 這個檔案充滿了錯字,任誰來打都難保不會失手。 + 這一次,請你一樣用 `cat` 來試著印出 `ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt` 的內容。 + hint: | + 輸入 `cat ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt` 來印出檔案內容 + 輸入 `cat Thsi` 之後按下 Tab 做自動補全 + 試試看輸入更少的字元就按 Tab 會有什麼樣的結果 + + - id: cat_typo + name: 使用 `cat` 印出 ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt 的內容 + requirements: + - cat_super_secret + condition: + pwd: /home/commander + command: cat ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt + response: + content: | + 你看到了這個充滿錯字的檔案了。 + 只要使用自動補全,不管是錯字、大小寫變化、還是隨機亂碼都不再是困擾了。 + 讓我們再練習一個,這次請你查看 `ThingsIWillOrganizeLaterWhenIHaveTime` 資料夾中的檔案。 + 一樣,輸入前幾個字,然後按 Tab 自動補全。 + hint: | + 輸入 `ls ThingsIWillOrganizeLaterWhenIHaveTime` 查看資料夾中的檔案 + 輸入 `ls Thing` 之後按下 Tab 做自動補全 + + - id: ls_things + name: 使用 `ls` 查看 ThingsIWillOrganizeLaterWhenIHaveTime 資料夾中的檔案 + requirements: + - cat_typo + condition: + pwd: /home/commander + command: ls ThingsIWillOrganizeLaterWhenIHaveTime + response: + content: | + 你看到了這個資料夾裡有著三個檔案:一個如何做三明治的教學跟兩個在半夜隨機下載的東西。 + 假如我們要打開三明治教學 `HowToProperlyMakeASandwich.txt`,但是它位在資料夾中,我們沒辦法只按一次 Tab 就補全它的檔名。 + 這次我們就要來練習使用**連續的自動補全**。 + + 像這樣檔案位在其他資料夾的情況,我們只要先輸入資料夾名稱的開頭,按一次 Tab,再輸入檔案的開頭,再按一次 Tab,就能夠補全 `資料夾/檔名` 了。 + 而且當你補全的對象是資料夾時,終端機還會自動幫你在結尾加上 `/`,省去你自己輸入的時間。 + 那麼我們就來打開 `HowToProperlyMakeASandwich.txt`。 + hint: | + 輸入 `cat ThingsIWillOrganizeLaterWhenIHaveTime/HowToProperlyMakeASandwich.txt` 來印出檔案內容 + 先輸入 `cat Thin` 按 Tab 補全至 `cat ThingsIWillOrganizeLaterWhenIHaveTime/` + 再輸入 `cat ThingsIWillOrganizeLaterWhenIHaveTime/How` 按 Tab 補全至完整路徑 + + - id: cat_sandwich + name: 使用 `cat` 印出 ThingsIWillOrganizeLaterWhenIHaveTime/HowToProperlyMakeASandwich.txt 的內容 + requirements: + - ls_things + condition: + command: cat ThingsIWillOrganizeLaterWhenIHaveTime/HowToProperlyMakeASandwich.txt + response: + content: | + 你看到了這份嚴謹的三明治製作教學。 + 那我們剩下來要看的就是資料夾裡的兩個檔案:`RandomStuffThatIDownloadedAt3AM.txt` 和 `RandomStuffThatIDownloadedAt4AM.txt` + 兩個檔名非常相似,只有最後一個是 3AM 另一個是 4AM。 + 這樣我們只打前面幾個字的時候,沒有辦法分辦到底選的是哪一個檔案。 + 這就是**發生衝突**。 + + 遇到衝突的解決方法,其實跟使用資料夾是一樣的。 + 在輸入 `Ran` 按下 Tab 後,終端機會補全到衝突發生前的位置,也就是 `RandomStuffThatIDownloadedAt`。 + 我們只要根據我們想開啟的檔案,輸入 `3` 或是 `4`,再按一下 Tab,就能夠補全剩下的檔名了。 + + _如果我們把完整的路徑視作補全的對象,那資料夾其實就是一種衝突的情況。_ + hint: | + 印出 `ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt3AM.txt` 的檔案內容 + 先輸入 `cat Thin` 按 Tab 補全至 `cat ThingsIWillOrganizeLaterWhenIHaveTime/` + 再接續輸入 `Ran` 按 Tab 補全至 `cat ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt` + 再接續輸入 `3` 後按 Tab 補全至完整的路徑。 + + - id: cat_3am + name: 使用 `cat` 印出 ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt3AM.txt 的內容 + requirements: + - cat_sandwich + condition: + pwd: /home/commander + command: cat ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt3AM.txt + response: + content: | + 你看到了一份凌晨三點下載的檔案列表。嗯…我今天網路用的夠多了。 + 最後留下一個挑戰給你,請先進入到 `ThingsIWillOrganizeLaterWhenIHaveTime` 資料夾後,再印出 `RandomStuffThatIDownloadedAt4AM.txt`。 + 練習使用今天教的自動補全來完成任務。 + hint: | + 先使用 `cd` 進入 ThingsIWillOrganizeLaterWhenIHaveTime 資料夾 + 再使用 `cat` 印出 RandomStuffThatIDownloadedAt4AM.txt 的內容 + 記得使用 Tab 自動補全來節省時間和避免錯誤 + + - id: cd_things + name: 使用 `cd` 進入 ThingsIWillOrganizeLaterWhenIHaveTime 資料夾 + requirements: + - cat_3am + condition: + pwd: /home/commander/ThingsIWillOrganizeLaterWhenIHaveTime + response: + content: | + 很好,你已經成功進入 ThingsIWillOrganizeLaterWhenIHaveTime 資料夾了。 + 現在請使用 `cat` 指令來印出 `RandomStuffThatIDownloadedAt4AM.txt` 的內容。 + 記得運用 Tab 自動補全功能! + + - id: END + name: 使用 `cat` 印出 RandomStuffThatIDownloadedAt4AM.txt 的內容 + requirements: + - cd_things + condition: + pwd: /home/commander/ThingsIWillOrganizeLaterWhenIHaveTime + command: cat RandomStuffThatIDownloadedAt4AM.txt + response: + content: | + 恭喜你!你已經成功完成了所有的任務,並且熟練地運用了 Tab 自動補全功能。 + 這個技能將會在你未來的終端機操作中帶來極大的便利。 + 記住,不論是長檔名、複雜路徑,還是難以拼寫的檔案名稱,Tab 自動補全都是你的好幫手! + hint: 你已經完成了所有任務!可以繼續探索或是結束這個關卡。 diff --git a/quests/tab/home/SuperSecretPlansForWorldDomination.txt b/quests/tab/home/SuperSecretPlansForWorldDomination.txt new file mode 100644 index 0000000..3ef2e2f --- /dev/null +++ b/quests/tab/home/SuperSecretPlansForWorldDomination.txt @@ -0,0 +1,10 @@ +1. 收集全世界的襪子,讓所有人都找不到另一支襪子。 +2. 訓練一支企鵝軍隊,用可愛征服世界。 +3. 發明一種能讓所有人講話都變成雞叫聲的裝置。 +4. 把所有的咖啡替換成無咖啡因的,看著世界陷入混亂。 +5. 用巨大的橡皮擦擦掉所有國家的邊界,宣布地球是一個巨大的遊樂場。 +6. 讓所有政治家在演講時必須穿著小丑服裝。 +7. 把所有的數學課本改成烹飪食譜,看看會發生什麼。 +8. 發明一種能讓人說出真心話的香水,然後在聯合國大會上噴灑。 +9. 用巨大的磁鐵吸走地球上所有的金屬,建造一個太空迪士尼樂園。 +10. 最後,如果以上都失敗了,就用可愛貓咪影片轟炸全世界的社交媒體,直到所有人都投降為止。 diff --git a/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/HowToProperlyMakeASandwich.txt b/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/HowToProperlyMakeASandwich.txt new file mode 100644 index 0000000..4bc4583 --- /dev/null +++ b/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/HowToProperlyMakeASandwich.txt @@ -0,0 +1,9 @@ +如何"正確"製作一個三明治: + +1. 用力拍醒你的麵包。它們整天都在發懶! +2. 仔細選擇配料,確保每種都有自己的個性。例如,挑選一片特別愛說笑話的火腿。 +3. 用尺精確測量每片配料的厚度,誤差不得超過1毫米。 +4. 在組裝三明治時,必須戴上白手套和實驗室防護鏡,以確保最高級別的衛生。 +5. 完成後,用放大鏡仔細檢查每一寸三明治,確保完美無缺。 + +記住:製作三明治是一門精確的科學,絕不容許有任何差錯或創意! diff --git a/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt3AM.txt b/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt3AM.txt new file mode 100644 index 0000000..f4f3f38 --- /dev/null +++ b/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt3AM.txt @@ -0,0 +1,5 @@ +我在凌晨 3 點開始下載的東西,但我一直沒有時間去整理。 + +1. 一個可以把所有食物變成披薩的魔法棒設計圖 +2. 如何在五分鐘內學會十種外星語言的秘密指南 +3. 用舊襪子製作時尚帽子的教程視頻(連結已失效) diff --git a/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt4AM.txt b/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt4AM.txt new file mode 100644 index 0000000..cee463c --- /dev/null +++ b/quests/tab/home/ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt4AM.txt @@ -0,0 +1,5 @@ +我在凌晨 4 點開始下載的東西,但我一直沒有時間去整理。 + +1. 一份詳細解釋為什麼貓咪才是地球真正統治者的論文 +2. 如何用口香糖和迴紋針修理國際太空站的WikiHow頁面 +3. 訓練水母成為水下偵探的完整課程大綱 diff --git a/quests/tab/home/ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt b/quests/tab/home/ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt new file mode 100644 index 0000000..f9aa76c --- /dev/null +++ b/quests/tab/home/ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt @@ -0,0 +1,3 @@ +Congrats! You fond a flie namd by somone who cleerly had a strok. If you can raed this, you mght be a geenius or jsut realy gud at Wheel of Fortnue. + +Remeber: freinds don't let freinds name files aftr drinkng too much. But hey, at lest you used tab compltion to get here! diff --git a/quests/tab/tab.md b/quests/tab/tab.md new file mode 100644 index 0000000..d6e7733 --- /dev/null +++ b/quests/tab/tab.md @@ -0,0 +1,95 @@ +# 使用 Tab 自動補全 + +在這個關卡,你將會學到 + +1. 如何使用 Tab 自動補全路徑 +2. 出現衝突時如何處理 + +按下中間的按鈕來開始這個關卡。 + +--- + +在終端機裡,所有的操作都是用文字進行。 +然而,打字很花時間,而且只要一個字打錯,指令就會執行失敗。 +因此終端機提供「自動補全」的功能,自動幫你完成檔案路徑、指令名稱、參數名稱,節省你的時間,也避免輸入錯誤。 + +在開始練習之前,我們先來看看家目錄下有哪些檔案。 + +> 使用 `ls` 查看檔案列表 + +--- + +你看到了這個資料夾中充滿了超級長和有錯字的檔案名稱,如果這些都要我們一個一個字輸入,肯定會很痛苦。 +但不要緊,只要使用自動補全,檔名不論多長都能輕鬆輸入。 + +使用自動補全的方法是,**先輸入部分的檔名,再按下 Tab** +(Tab 是 Q 左邊的按鍵) +例如要補全 `SuperSecretPlansForWorldDomination.txt`,你可以先輸入 `Su` 再按下 Tab,終端機就會幫你打完剩下的檔名了。 + +我們試看看印出 `SuperSecretPlansForWorldDomination.txt` 這個檔案的內容。 + +> 使用 `cat SuperSecretPlansForWorldDomination.txt` 來印出檔案內容 +> 在輸入 `cat Su` 之後按下 Tab 來自動補全檔名,完成後按 Enter 就能執行指令 + +--- + +你看到了終端機自動幫你補全了 `SuperSecretPlansForWorldDomination.txt`,就算是很長的檔名,也不用怕打錯字。 +開頭不論你打了幾個字都無所謂,你可以只打 `S`、`Su`、`Sup`、`Super` 或甚至完全不打字都沒關係。 +但是你打的字越少,就越容易跟其他的檔案重複,這時候就要做衝突處理。 +關於衝突處理,我們會在待會練習。 + +自動補全也可以用來對付拼字錯誤,像是 `ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt` 這個檔案充滿了錯字,任誰來打都難保不會失手。 +這一次,請你一樣用 `cat` 來試著印出 `ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt` 的內容。 + +> 輸入 `cat ThsisAFlieNmaeWthAloOfTpyosThatisRleayHdToRaed.txt` 來印出檔案內容 +> 輸入 `cat Thsi` 之後按下 Tab 做自動補全 +> 試試看輸入更少的字元就按 Tab 會有什麼樣的結果 + +--- + +你看到了這個充滿錯字的檔案了。 +只要使用自動補全,不管是錯字、大小寫變化、還是隨機亂碼都不再是困擾了。 +讓我們再練習一個,這次請你查看 `ThingsIWillOrganizeLaterWhenIHaveTime` 資料夾中的檔案。 +一樣,輸入前幾個字,然後按 Tab 自動補全。 + +> 輸入 `ls ThingsIWillOrganizeLaterWhenIHaveTime` 查看資料夾中的檔案 +> 輸入 `ls Thing` 之後按下 Tab 做自動補全 + +--- + +你看到了這個資料夾裡有著三個檔案:一個如何做三明治的教學跟兩個在半夜隨機下載的東西。 +假如我們要打開三明治教學 `HowToProperlyMakeASandwich.txt`,但是它位在資料夾中,我們沒辦法只按一次 Tab 就補全它的檔名。 +這次我們就要來練習使用**連續的自動補全**。 + +像這樣檔案位在其他資料夾的情況,我們只要先輸入資料夾名稱的開頭,按一次 Tab,再輸入檔案的開頭,再按一次 Tab,就能夠補全 `資料夾/檔名` 了。 +而且當你補全的對象是資料夾時,終端機還會自動幫你在結尾加上 `/`,省去你自己輸入的時間。 +那麼我們就來打開 `HowToProperlyMakeASandwich.txt`。 + +> 輸入 `cat ThingsIWillOrganizeLaterWhenIHaveTime/HowToProperlyMakeASandwich.txt` 來印出檔案內容 +> 先輸入 `cat Thin` 按 Tab 補全至 `cat ThingsIWillOrganizeLaterWhenIHaveTime/` +> 再輸入 `cat ThingsIWillOrganizeLaterWhenIHaveTime/How` 按 Tab 補全至完整路徑 + +--- + +你看到了這份嚴謹的三明治製作教學。 +那我們剩下來要看的就是資料夾裡的兩個檔案:`RandomStuffThatIDownloadedAt3AM.txt` 和 `RandomStuffThatIDownloadedAt4AM.txt` +兩個檔名非常相似,只有最後一個是 3AM 另一個是 4AM。 +這樣我們只打前面幾個字的時候,沒有辦法分辦到底選的是哪一個檔案。 +這就是**發生衝突**。 + +遇到衝突的解決方法,其實跟使用資料夾是一樣的。 +在輸入 `Ran` 按下 Tab 後,終端機會補全到衝突發生前的位置,也就是 `RandomStuffThatIDownloadedAt`。 +我們只要根據我們想開啟的檔案,輸入 `3` 或是 `4`,再按一下 Tab,就能夠補全剩下的檔名了。 + +_如果我們把完整的路徑視作補全的對象,那資料夾其實就是一種衝突的情況。_ + +> 輸入 `cat ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt3AM.txt` 來印出檔案內容 +> 先輸入 `cat Thin` 按 Tab 補全至 `cat ThingsIWillOrganizeLaterWhenIHaveTime/` +> 再接續輸入 `Ran` 按 Tab 補全至 `cat ThingsIWillOrganizeLaterWhenIHaveTime/RandomStuffThatIDownloadedAt` +> 再接續輸入 `3` 後按 Tab 補全至完整的路徑。 + +--- + +你看到了一份凌晨三點下載的檔案列表。嗯…我今天網路用的夠多了。 +最後留下一個挑戰給你,請先進入到 `ThingsIWillOrganizeLaterWhenIHaveTime` 資料夾後,再印出 `RandomStuffThatIDownloadedAt4AM.txt`。 +練習使用今天教的自動補全來完成任務。