歡迎光臨
每天分享高質量文章

給初學者的 fc 示例教程 | Linux 中國

fc 是個 shell 內建命令,用於在互動式 shell 裡列出、編輯和執行最近輸入的命令。
— Sk


致謝
編譯自 | https://www.ostechnix.com/the-fc-command-tutorial-with-examples-for-beginners/ 
 作者 | Sk
 譯者 | Dot Craft (Dotcra) ? ? 共計翻譯:3 篇 貢獻時間:431 天

fc (Fix Commands 的縮寫)是個 shell 內建命令,用於在互動式 shell 裡列出、編輯和執行最近輸入的命令。你可以用你喜歡的編輯器編輯最近的命令並再次執行,而不用把它們整個重新輸入一遍。除了可以避免重覆輸入又長又複雜的命令,它對修正拼寫錯誤來說也很有用。因為是 shell 內建命令,大多 shell 都包含它,比如 Bash 、 Zsh 、 Ksh 等。在這篇短文中,我們來學一學在 Linux 中使用 fc 命令。

fc 命令教程及示例

列出最近執行的命令

執行不帶其它引數的 fc -l 命令,它會列出最近 16 個命令。

  1. $ fc -l

  2. 507 fish

  3. 508 fc -l

  4. 509 sudo netctl restart wlp9s0sktab

  5. 510 ls -l

  6. 511 pwd

  7. 512 uname -r

  8. 513 uname -a

  9. 514 touch ostechnix.txt

  10. 515 vi ostechnix.txt

  11. 516 echo "Welcome to OSTechNix"

  12. 517 sudo apcman -Syu

  13. 518 sudo pacman -Syu

  14. 519 more ostechnix.txt

  15. 520 wc -l ostechnix.txt

  16. 521 cat ostechnix.txt

  17. 522 clear

-r 選項用於將輸出反向排序。

  1. $ fc -lr

-n 選項用於隱藏行號。

  1. $ fc -ln

  2. nano ~/.profile

  3. source ~/.profile

  4. source ~/.profile

  5. fc -ln

  6. fc -l

  7. sudo netctl restart wlp9s0sktab

  8. ls -l

  9. pwd

  10. uname -r

  11. uname -a

  12. echo "Welcome to OSTechNix"

  13. sudo apcman -Syu

  14. cat ostechnix.txt

  15. wc -l ostechnix.txt

  16. more ostechnix.txt

  17. clear

這樣行號就不再顯示了。

如果想以某個命令開始,只需在 -l 選項後面加上行號即可。比如,要顯示行號 520 至最近的命令,可以這樣:

  1. $ fc -l 520

  2. 520 ls -l

  3. 521 pwd

  4. 522 uname -r

  5. 523 uname -a

  6. 524 echo "Welcome to OSTechNix"

  7. 525 sudo apcman -Syu

  8. 526 cat ostechnix.txt

  9. 527 wc -l ostechnix.txt

  10. 528 more ostechnix.txt

  11. 529 clear

  12. 530 fc -ln

  13. 531 fc -l

要列出一段範圍內的命令,將始、末行號作為 fc -l 的引數即可,比如 520 至 525:

  1. $ fc -l 520 525

  2. 520 ls -l

  3. 521 pwd

  4. 522 uname -r

  5. 523 uname -a

  6. 524 echo "Welcome to OSTechNix"

  7. 525 sudo apcman -Syu

除了使用行號,我們還可以使用字元。比如,要列出最近一個 pwd 至最近一個命令之間的所有命令,只需要像下麵這樣使用起始字母即可:

  1. $ fc -l p

  2. 521 pwd

  3. 522 uname -r

  4. 523 uname -a

  5. 524 echo "Welcome to OSTechNix"

  6. 525 sudo apcman -Syu

  7. 526 cat ostechnix.txt

  8. 527 wc -l ostechnix.txt

  9. 528 more ostechnix.txt

  10. 529 clear

  11. 530 fc -ln

  12. 531 fc -l

  13. 532 fc -l 520

  14. 533 fc -l 520 525

  15. 534 fc -l 520

  16. 535 fc -l 522

  17. 536 fc -l l

要列出所有 pwd 和 more 之間的命令,你可以都使用起始字母,像這樣:

  1. $ fc -l p m

或者,使用開始命令的首字母以及結束命令的行號:

  1. $ fc -l p 528

或者都使用行號:

  1. $ fc -l 521 528

這三個命令都顯示一樣的結果。

編輯並執行上一個命令

我們經常敲錯命令,這時你可以用預設編輯器修正拼寫錯誤並執行而不用將命令重新再敲一遍。

編輯並執行上一個命令:

  1. $ fc

這會在預設編輯器裡載入上一個命令。

你可以看到,我上一個命令是 fc -l。你可以隨意修改,它會在你儲存退出編輯器時自動執行。這在命令或引數又長又複雜時很有用。需要註意的是,它同時也可能是毀滅性的。比如,如果你的上一個命令是危險的 rm -fr ,當它自動執行時你可能丟掉你的重要資料。所以,小心謹慎對待每一個命令。

更改預設編輯器

另一個有用的選項是 -e ,它可以用來為 fc 命令選擇不同的編輯器。比如,如果我們想用 nano 來編輯上一個命令:

  1. $ fc -e nano

這個命令會開啟 nano 編輯器(而不是預設編輯器)編輯上一個命令。

如果你覺得用 -e 選項太麻煩,你可以修改你的預設編輯器,只需要將環境變數 FCEDIT 設為你想要讓 fc 使用的編輯器名稱即可。

比如,要把 nano 設為預設編輯器,編輯你的 ~/.profile 或其他初始化檔案: (LCTT 譯註:如果 ~/.profile 不存在可自己建立;如果使用的是 bash ,可以編輯 ~/.bash_profile )

  1. $ vi ~/.profile

新增下麵一行:

  1. FCEDIT=nano

  2. # LCTT譯註:如果在子 shell 中會用到 fc ,最好在這裡 export FCEDIT

你也可以使用編輯器的完整路徑:

  1. FCEDIT=/usr/local/bin/emacs

輸入 :wq 儲存退出。要使改動立即生效,執行以下命令:

  1. $ source ~/.profile

現在再輸入 fc 就可以使用 nano 編輯器來編輯上一個命令了。

不編輯而直接執行上一個命令

我們現在知道 fc 命令不帶任何引數的話會將上一個命令載入編輯器。但有時你可能不想編輯,僅僅是想再次執行上一個命令。這很簡單,在末尾加上連字元(-)就可以了:

  1. $ echo "Welcome to OSTechNix"

  2. Welcome to OSTechNix

  3. $ fc -e -

  4. echo "Welcome to OSTechNix"

  5. Welcome to OSTechNix

如你所見,fc 帶了 -e 選項,但並沒有編輯上一個命令(例中的 echo " Welcome to OSTechNix")。

需要註意的是,有些選項僅對指定 shell 有效。比如下麵這些選項可以用在 zsh 中,但在 Bash 或 Ksh 中則不能用。

顯示命令的執行時間

想要知道命令是在什麼時候執行的,可以用 -d 選項:

  1. fc -ld

  2. 1 18:41 exit

  3. 2 18:41 clear

  4. 3 18:42 fc -l

  5. 4 18:42 sudo netctl restart wlp9s0sktab

  6. 5 18:42 ls -l

  7. 6 18:42 pwd

  8. 7 18:42 uname -r

  9. 8 18:43 uname -a

  10. 9 18:43 cat ostechnix.txt

  11. 10 18:43 echo "Welcome to OSTechNix"

  12. 11 18:43 more ostechnix.txt

  13. 12 18:43 wc -l ostechnix.txt

  14. 13 18:43 cat ostechnix.txt

  15. 14 18:43 clear

  16. 15 18:43 fc -l

這樣你就可以檢視最近命令的具體執行時間了。

使用選項 -f ,可以為每個命令顯示完整的時間戳。

  1. fc -lf

  2. 1 4/5/2018 18:41 exit

  3. 2 4/5/2018 18:41 clear

  4. 3 4/5/2018 18:42 fc -l

  5. 4 4/5/2018 18:42 sudo netctl restart wlp9s0sktab

  6. 5 4/5/2018 18:42 ls -l

  7. 6 4/5/2018 18:42 pwd

  8. 7 4/5/2018 18:42 uname -r

  9. 8 4/5/2018 18:43 uname -a

  10. 9 4/5/2018 18:43 cat ostechnix.txt

  11. 10 4/5/2018 18:43 echo "Welcome to OSTechNix"

  12. 11 4/5/2018 18:43 more ostechnix.txt

  13. 12 4/5/2018 18:43 wc -l ostechnix.txt

  14. 13 4/5/2018 18:43 cat ostechnix.txt

  15. 14 4/5/2018 18:43 clear

  16. 15 4/5/2018 18:43 fc -l

  17. 16 4/5/2018 18:43 fc -ld

當然,歐洲的老鄉們還可以使用 -E 選項來顯示歐洲時間格式。

  1. fc -lE

  2. 2 5.4.2018 18:41 clear

  3. 3 5.4.2018 18:42 fc -l

  4. 4 5.4.2018 18:42 sudo netctl restart wlp9s0sktab

  5. 5 5.4.2018 18:42 ls -l

  6. 6 5.4.2018 18:42 pwd

  7. 7 5.4.2018 18:42 uname -r

  8. 8 5.4.2018 18:43 uname -a

  9. 9 5.4.2018 18:43 cat ostechnix.txt

  10. 10 5.4.2018 18:43 echo "Welcome to OSTechNix"

  11. 11 5.4.2018 18:43 more ostechnix.txt

  12. 12 5.4.2018 18:43 wc -l ostechnix.txt

  13. 13 5.4.2018 18:43 cat ostechnix.txt

  14. 14 5.4.2018 18:43 clear

  15. 15 5.4.2018 18:43 fc -l

  16. 16 5.4.2018 18:43 fc -ld

  17. 17 5.4.2018 18:49 fc -lf

fc 用法總結

◈ 當不帶任何引數時,fc 將上一個命令載入預設編輯器。
◈ 當帶一個數字作為引數時,fc 將數字指定的命令載入預設編輯器。
◈ 當帶一個字元作為引數時,fc 將最近一個以指定字元開頭的命令載入預設編輯器。
◈ 當有兩個引數時,它們分別指定需要列出的命令範圍的開始和結束。

更多細節,請參考 man 手冊。

  1. $ man fc

好了,今天就這些。希望這篇文章能幫助到你。更多精彩內容,敬請期待!


via: https://www.ostechnix.com/the-fc-command-tutorial-with-examples-for-beginners/

作者:SK[2] 選題:lujun9972 譯者:Dotcra 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂