"\u003Cdiv\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F672b231fe2ca472eb5d158566c3d7edb\" img_width=\"1920\" img_height=\"1080\" alt=\"不可或缺的 Bash 別名\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cblockquote\u003E\u003Cp\u003E厭倦了一遍又一遍地輸入相同的長命令?你覺得在命令行上工作效率低嗎?Bash 別名可以爲你創造一個與衆不同的世界。\u003C\u002Fp\u003E\u003Cp\u003E-- Seth Kenlon(作者)\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003EBash 別名是一種用新的命令補充或覆蓋 Bash 命令的方法。Bash 別名使用戶可以輕鬆地在 POSIX 終端中自定義其體驗。它們通常定義在 $HOME\u002F.bashrc 或 $HOME\u002Fbash_aliases 中(它是由 $HOME\u002F.bashrc 加載的)。\u003C\u002Fp\u003E\u003Cp\u003E大多數發行版在新用戶帳戶的默認 .bashrc 文件中至少添加了一些流行的別名。這些可以用來簡單演示 Bash 別名的語法:\u003C\u002Fp\u003E\u003Cpre\u003Ealias ls='ls -F'\u003Cbr\u003Ealias ll='ls -lh'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E但並非所有發行版都附帶預先添加好的別名。如果你想手動添加別名,則必須將它們加載到當前的 Bash 會話中:\u003C\u002Fp\u003E\u003Cpre\u003E$ source ~\u002F.bashrc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E否則,你可以關閉終端並重新打開它,以便重新加載其配置文件。\u003C\u002Fp\u003E\u003Cp\u003E通過 Bash 初始化腳本中定義的那些別名,你可以鍵入 ll 而得到 ls -l 的結果,當你鍵入 ls 時,得到也不是原來的 ls 的普通輸出。\u003C\u002Fp\u003E\u003Cp\u003E那些別名很棒,但它們只是淺嘗輒止。以下是十大 Bash 別名,一旦你試過它們,你會發現再也不能離開它們。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E首先設置\u003C\u002Fh1\u003E\u003Cp\u003E在開始之前,創建一個名爲 ~\u002F.bash_aliases 的文件:\u003C\u002Fp\u003E\u003Cpre\u003E$ touch ~\u002F.bash_aliases\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E然後,確認這些代碼出現在你的 ~\u002F.bashrc 文件當中:\u003C\u002Fp\u003E\u003Cpre\u003Eif [ -e $HOME\u002F.bash_aliases ]; then\u003Cbr\u003E source $HOME\u002F.bash_aliases\u003Cbr\u003Efi\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E如果你想親自嘗試本文中的任何別名,請將它們輸入到 .bash_aliases 文件當中,然後使用 source ~\u002F.bashrc 命令將它們加載到當前 Bash 會話中。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E按文件大小排序\u003C\u002Fh1\u003E\u003Cp\u003E如果你一開始使用過 GNOME 中的 Nautilus、MacOS 中的 Finder 或 Windows 中的資源管理器等 GUI 文件管理器,那麼你很可能習慣了按文件大小排序文件列表。你也可以在終端上做到這一點,但這條命令不是很簡潔。\u003C\u002Fp\u003E\u003Cp\u003E將此別名添加到 GNU 系統上的配置中:\u003C\u002Fp\u003E\u003Cpre\u003Ealias lt='ls --human-readable --size -1 -S --classify'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E此別名將 lt 替換爲 ls 命令,該命令在單個列中顯示每個項目的大小,然後按大小對其進行排序,並使用符號表示文件類型。加載新別名,然後試一下:\u003C\u002Fp\u003E\u003Cpre\u003E$ source ~\u002F.bashrc\u003Cbr\u003E$ lt\u003Cbr\u003Etotal 344K\u003Cbr\u003E140K configure*\u003Cbr\u003E 44K aclocal.m4\u003Cbr\u003E 36K LICENSE\u003Cbr\u003E 32K config.status*\u003Cbr\u003E 24K Makefile\u003Cbr\u003E 24K Makefile.in\u003Cbr\u003E 12K config.log\u003Cbr\u003E8.0K README.md\u003Cbr\u003E4.0K info.slackermedia.Git-portal.json\u003Cbr\u003E4.0K git-portal.spec\u003Cbr\u003E4.0K flatpak.path.patch\u003Cbr\u003E4.0K Makefile.am*\u003Cbr\u003E4.0K dot-gitlab.ci.yml\u003Cbr\u003E4.0K configure.ac*\u003Cbr\u003E 0 autom4te.cache\u002F\u003Cbr\u003E 0 share\u002F\u003Cbr\u003E 0 bin\u002F\u003Cbr\u003E 0 install-sh@\u003Cbr\u003E 0 compile@\u003Cbr\u003E 0 missing@\u003Cbr\u003E 0 COPYING@\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E在 MacOS 或 BSD 上,ls 命令沒有相同的選項,因此這個別名可以改爲:\u003C\u002Fp\u003E\u003Cpre\u003Ealias lt='du -sh * | sort -h'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E這個版本的結果稍有不同:\u003C\u002Fp\u003E\u003Cpre\u003E$ du -sh * | sort -h\u003Cbr\u003E0 compile\u003Cbr\u003E0 COPYING\u003Cbr\u003E0 install-sh\u003Cbr\u003E0 missing\u003Cbr\u003E4.0K configure.ac\u003Cbr\u003E4.0K dot-gitlab.ci.yml\u003Cbr\u003E4.0K flatpak.path.patch\u003Cbr\u003E4.0K git-portal.spec\u003Cbr\u003E4.0K info.slackermedia.Git-portal.json\u003Cbr\u003E4.0K Makefile.am\u003Cbr\u003E8.0K README.md\u003Cbr\u003E12K config.log\u003Cbr\u003E16K bin\u003Cbr\u003E24K Makefile\u003Cbr\u003E24K Makefile.in\u003Cbr\u003E32K config.status\u003Cbr\u003E36K LICENSE\u003Cbr\u003E44K aclocal.m4\u003Cbr\u003E60K share\u003Cbr\u003E140K configure\u003Cbr\u003E476K autom4te.cache\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E實際上,即使在 Linux上,上面這個命令也很有用,因爲使用 ls 列出的目錄和符號鏈接的大小爲 0,這可能不是你真正想要的信息。使用哪個看你自己的喜好。\u003C\u002Fp\u003E\u003Cp\u003E感謝 Brad Alexander 提供的這個別名的思路。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E只查看掛載的驅動器\u003C\u002Fh1\u003E\u003Cp\u003Emount 命令過去很簡單。只需一個命令,你就可以獲得計算機上所有已掛載的文件系統的列表,它經常用於概覽連接到工作站有哪些驅動器。在過去看到超過三、四個條目就會令人印象深刻,因爲大多數計算機沒有那麼多的 USB 端口,因此這個結果還是比較好查看的。\u003C\u002Fp\u003E\u003Cp\u003E現在計算機有點複雜,有 LVM、物理驅動器、網絡存儲和虛擬文件系統,mount 的結果就很難一目瞭然:\u003C\u002Fp\u003E\u003Cpre\u003Esysfs on \u002Fsys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)\u003Cbr\u003Eproc on \u002Fproc type proc (rw,nosuid,nodev,noexec,relatime)\u003Cbr\u003Edevtmpfs on \u002Fdev type devtmpfs (rw,nosuid,seclabel,size=8131024k,nr_inodes=2032756,mode=755)\u003Cbr\u003Esecurityfs on \u002Fsys\u002Fkernel\u002Fsecurity type securityfs (rw,nosuid,nodev,noexec,relatime)\u003Cbr\u003E[...]\u003Cbr\u003E\u002Fdev\u002Fnvme0n1p2 on \u002Fboot type ext4 (rw,relatime,seclabel)\u003Cbr\u003E\u002Fdev\u002Fnvme0n1p1 on \u002Fboot\u002Fefi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)\u003Cbr\u003E[...]\u003Cbr\u003Egvfsd-fuse on \u002Frun\u002Fuser\u002F100977\u002Fgvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=100977,group_id=100977)\u003Cbr\u003E\u002Fdev\u002Fsda1 on \u002Frun\u002Fmedia\u002Fseth\u002Fpocket type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)\u003Cbr\u003E\u002Fdev\u002Fsdc1 on \u002Frun\u002Fmedia\u002Fseth\u002Ftrip type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)\u003Cbr\u003Ebinfmt_misc on \u002Fproc\u002Fsys\u002Ffs\u002Fbinfmt_misc type binfmt_misc (rw,relatime)\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E要解決這個問題,試試這個別名:\u003C\u002Fp\u003E\u003Cpre\u003Ealias mnt='mount | awk -F' ' '{ printf \"%s\\t%s\\n\",$1,$3; }' | column -t | egrep ^\u002Fdev\u002F | sort'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E此別名使用 awk 按列解析 mount 的輸出,將輸出減少到你可能想要查找的內容(掛載了哪些硬盤驅動器,而不是文件系統):\u003C\u002Fp\u003E\u003Cpre\u003E$ mnt\u003Cbr\u003E\u002Fdev\u002Fmapper\u002Ffedora-root \u002F\u003Cbr\u003E\u002Fdev\u002Fnvme0n1p1 \u002Fboot\u002Fefi\u003Cbr\u003E\u002Fdev\u002Fnvme0n1p2 \u002Fboot\u003Cbr\u003E\u002Fdev\u002Fsda1 \u002Frun\u002Fmedia\u002Fseth\u002Fpocket\u003Cbr\u003E\u002Fdev\u002Fsdc1 \u002Frun\u002Fmedia\u002Fseth\u002Ftrip\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E在 MacOS 上,mount 命令不提供非常詳細的輸出,因此這個別名可能過度精簡了。但是,如果你更喜歡簡潔的報告,請嘗試以下方法:\u003C\u002Fp\u003E\u003Cpre\u003Ealias mnt='mount | grep -E ^\u002Fdev | column -t'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E結果:\u003C\u002Fp\u003E\u003Cpre\u003E$ mnt\u003Cbr\u003E\u002Fdev\u002Fdisk1s1 on \u002F (apfs, local, journaled)\u003Cbr\u003E\u002Fdev\u002Fdisk1s4 on \u002Fprivate\u002Fvar\u002Fvm (apfs, local, noexec, journaled, noatime, nobrowse)\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E在你的 grep 歷史中查找命令\u003C\u002Fh1\u003E\u003Cp\u003E有時你好不容易弄清楚瞭如何在終端完成某件事,並覺得自己永遠不會忘記你剛學到的東西。然後,一個小時過去之後你就完全忘記了你做了什麼。\u003C\u002Fp\u003E\u003Cp\u003E搜索 Bash 歷史記錄是每個人不時要做的事情。如果你確切地知道要搜索的內容,可以使用 Ctrl + R 對歷史記錄進行反向搜索,但有時你無法記住要查找的確切命令。\u003C\u002Fp\u003E\u003Cp\u003E這是使該任務更容易的別名:\u003C\u002Fp\u003E\u003Cpre\u003Ealias gh='history|grep'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E這是如何使用的例子:\u003C\u002Fp\u003E\u003Cpre\u003E$ gh bash\u003Cbr\u003E482 cat ~\u002F.bashrc | grep _alias\u003Cbr\u003E498 emacs ~\u002F.bashrc\u003Cbr\u003E530 emacs ~\u002F.bash_aliases\u003Cbr\u003E531 source ~\u002F.bashrc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E按修改時間排序\u003C\u002Fh1\u003E\u003Cp\u003E每個星期一都會這樣:你坐在你的電腦前開始工作,你打開一個終端,你發現你已經忘記了上週五你在做什麼。你需要的是列出最近修改的文件的別名。\u003C\u002Fp\u003E\u003Cp\u003E你可以使用 ls 命令創建別名,以幫助你找到上次離開的位置:\u003C\u002Fp\u003E\u003Cpre\u003Ealias left='ls -t -1'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E輸出很簡單,但如果你願意,可以使用 --long 選項擴展它。這個別名列出的顯示如下:\u003C\u002Fp\u003E\u003Cpre\u003E$ left\u003Cbr\u003Edemo.jpeg\u003Cbr\u003Edemo.xcf\u003Cbr\u003Edesign-proposal.md\u003Cbr\u003Erejects.txt\u003Cbr\u003Ebrainstorm.txt\u003Cbr\u003Equery-letter.xml\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E文件計數\u003C\u002Fh1\u003E\u003Cp\u003E如果你需要知道目錄中有多少文件,那麼該解決方案是 UNIX 命令構造的最典型示例之一:使用 ls 命令列出文件,用-1 選項將其輸出控制爲只有一列,然後輸出到 wc(單詞計數)命令的管道,以計算有多少行。\u003C\u002Fp\u003E\u003Cp\u003E這是 UNIX 理念如何允許用戶使用小型的系統組件構建自己的解決方案的精彩演示。如果你碰巧每天都要做幾次,這個命令組合也要輸入很多字母,如果沒有使用 -R 選項,它就不能用於目錄,這會爲輸出引入新行並導致無用的結果。\u003C\u002Fp\u003E\u003Cp\u003E而這個別名使這個過程變得簡單:\u003C\u002Fp\u003E\u003Cpre\u003Ealias count='find . -type f | wc -l'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E這個別名會計算文件,忽略目錄,但\u003Cstrong\u003E不會\u003C\u002Fstrong\u003E忽略目錄的內容。如果你有一個包含兩個目錄的項目文件夾,每個目錄包含兩個文件,則該別名將返回 4,因爲整個項目中有 4 個文件。\u003C\u002Fp\u003E\u003Cpre\u003E$ ls\u003Cbr\u003Efoo bar\u003Cbr\u003E$ count\u003Cbr\u003E4\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E創建 Python 虛擬環境\u003C\u002Fh1\u003E\u003Cp\u003E你用 Python 編程嗎?\u003C\u002Fp\u003E\u003Cp\u003E你用 Python 編寫了很多程序嗎?\u003C\u002Fp\u003E\u003Cp\u003E如果是這樣,那麼你就知道創建 Python 虛擬環境至少需要 53 次擊鍵。\u003C\u002Fp\u003E\u003Cp\u003E這個數字裏有 49 次是多餘的,它很容易被兩個名爲 ve 和 va 的新別名所解決:\u003C\u002Fp\u003E\u003Cpre\u003Ealias ve='python3 -m venv .\u002Fvenv'\u003Cbr\u003Ealias va='source .\u002Fvenv\u002Fbin\u002Factivate'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E運行 ve 會創建一個名爲 venv 的新目錄,其中包含 Python 3 的常用虛擬環境文件系統。va 別名在當前 shell 中的激活該環境:\u003C\u002Fp\u003E\u003Cpre\u003E$ cd my-project\u003Cbr\u003E$ ve\u003Cbr\u003E$ va\u003Cbr\u003E(venv) $\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E增加一個複製進度條\u003C\u002Fh1\u003E\u003Cp\u003E每個人都會吐槽進度條,因爲它們似乎總是不合時宜。然而,在內心深處,我們似乎都想要它們。UNIX 的 cp 命令沒有進度條,但它有一個 -v 選項用於顯示詳細信息,它回顯了複製的每個文件名到終端。這是一個相當不錯的技巧,但是當你複製一個大文件並且想要了解還有多少文件尚未傳輸時,它的作用就沒那麼大了。\u003C\u002Fp\u003E\u003Cp\u003Epv 命令可以在複製期間提供進度條,但它並不常用。另一方面,rsync 命令包含在幾乎所有的 POSIX 系統的默認安裝中,並且它被普遍認爲是遠程和本地複製文件的最智能方法之一。\u003C\u002Fp\u003E\u003Cp\u003E更好的是,它有一個內置的進度條。\u003C\u002Fp\u003E\u003Cpre\u003Ealias cpv='rsync -ah --info=progress2'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E像使用 cp 命令一樣使用此別名:\u003C\u002Fp\u003E\u003Cpre\u003E$ cpv bigfile.flac \u002Frun\u002Fmedia\u002Fseth\u002Faudio\u002F\u003Cbr\u003E 3.83M 6% 213.15MB\u002Fs 0:00:00 (xfr#4, to-chk=0\u002F4)\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E使用此命令的一個有趣的副作用是 rsync 無需 -r 標誌就可以複製文件和目錄,而 cp 則需要。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E避免意外刪除\u003C\u002Fh1\u003E\u003Cp\u003E你不應該使用 rm 命令。rm 手冊甚至這樣說:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E\u003Cstrong\u003E警告:\u003C\u002Fstrong\u003E如果使用 rm 刪除文件,通常可以恢復該文件的內容。如果你想要更加確保內容真正無法恢復,請考慮使用 shred。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E如果要刪除文件,則應將文件移動到“廢紙簍”,就像使用桌面時一樣。\u003C\u002Fp\u003E\u003Cp\u003EPOSIX 使這很簡單,因爲垃圾桶是文件系統中可訪問的一個實際位置。該位置可能會發生變化,具體取決於你的平臺:在 FreeDesktop 上,“垃圾桶”位於 ~\u002F.local\u002Fshare\u002FTrash,而在 MacOS 上則是 ~\u002F.Trash,但無論如何,它只是一個目錄,你可以將文件藏在那個看不見的地方,直到你準備永久刪除它們爲止。\u003C\u002Fp\u003E\u003Cp\u003E這個簡單的別名提供了一種從終端將文件扔進垃圾桶的方法:\u003C\u002Fp\u003E\u003Cpre\u003Ealias tcn='mv --force -t ~\u002F.local\u002Fshare\u002FTrash '\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E該別名使用一個鮮爲人知的 mv 標誌(-t),使你能夠提供作爲最終移動目標的參數,而忽略了首先列出要移動的文件的通常要求。現在,你可以使用新命令將文件和文件夾移動到系統垃圾桶:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls\u003Cbr\u003Efoo bar\u003Cbr\u003E$ tcn foo\u003Cbr\u003E$ ls\u003Cbr\u003Ebar\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E現在文件已“消失”,只有在你一頭冷汗的時候才意識到你還需要它。此時,你可以從系統垃圾桶中搶救該文件;這肯定可以給 Bash 和 mv 開發人員提供一些幫助。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E注意:\u003C\u002Fstrong\u003E如果你需要一個具有更好的 FreeDesktop 兼容性的更強大的垃圾桶命令,請參閱 Trashy 。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E簡化 Git 工作流\u003C\u002Fh1\u003E\u003Cp\u003E每個人都有自己獨特的工作流程,但無論如何,通常都會有重複的任務。如果你經常使用 Git,那麼你可能會發現自己經常重複的一些操作序列。也許你會發現自己回到主分支並整天一遍又一遍地拉取最新的變化,或者你可能發現自己創建了標籤然後將它們推到遠端,抑或可能完全是其它的什麼東西。\u003C\u002Fp\u003E\u003Cp\u003E無論讓你厭倦一遍遍輸入的 Git 魔咒是什麼,你都可以通過 Bash 別名減輕一些痛苦。很大程度上,由於它能夠將參數傳遞給鉤子,Git 擁有着豐富的內省命令,可以讓你不必在 Bash 中執行那些醜陋冗長的命令。\u003C\u002Fp\u003E\u003Cp\u003E例如,雖然你可能很難在 Bash 中找到項目的頂級目錄(就 Bash 而言,它是一個完全隨意的名稱,因爲計算機的絕對頂級是根目錄),但 Git 可以通過簡單的查詢找到項目的頂級目錄。如果你研究過 Git 鉤子,你會發現自己能夠找到 Bash 一無所知的各種信息,而你可以利用 Bash 別名來利用這些信息。\u003C\u002Fp\u003E\u003Cp\u003E這是一個來查找 Git 項目的頂級目錄的別名,無論你當前在哪個項目中工作,都可以將目錄改變爲頂級目錄,切換到主分支,並執行 Git 拉取:\u003C\u002Fp\u003E\u003Cpre\u003Ealias startgit='cd `git rev-parse --show-toplevel` && git checkout master && git pull'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E這種別名絕不是一個普遍有用的別名,但它演示了一個相對簡單的別名如何能夠消除大量繁瑣的導航、命令和等待提示。\u003C\u002Fp\u003E\u003Cp\u003E一個更簡單,可能更通用的別名將使你返回到 Git 項目的頂級目錄。這個別名非常有用,因爲當你在一個項目上工作時,該項目或多或少會成爲你的“臨時家目錄”。它應該像回家一樣簡單,就像回你真正的家一樣,這裏有一個別名:\u003C\u002Fp\u003E\u003Cpre\u003Ealias cg='cd `git rev-parse --show-toplevel`'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E現在,命令 cg 將你帶到 Git 項目的頂部,無論你下潛的目錄結構有多深。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E切換目錄並同時查看目錄內容\u003C\u002Fh1\u003E\u003Cp\u003E(據稱)曾經一位著名科學家提出過,我們可以通過收集極客輸入 cd 後跟 ls 消耗的能量來解決地球上的許多能量問題。\u003C\u002Fp\u003E\u003Cp\u003E這是一種常見的用法,因爲通常當你更改目錄時,你都會有查看周圍的內容的衝動或需要。\u003C\u002Fp\u003E\u003Cp\u003E但是在你的計算機的目錄樹中移動並不一定是一個走走停停的過程。\u003C\u002Fp\u003E\u003Cp\u003E這是一個作弊,因爲它根本不是別名,但它是探索 Bash 功能的一個很好的藉口。雖然別名非常適合快速替換一個命令,但 Bash 也允許你在 .bashrc 文件中添加本地函數(或者你加載到 .bashrc 中的單獨函數文件,就像你的別名文件一樣)。\u003C\u002Fp\u003E\u003Cp\u003E爲了保持模塊化,創建一個名爲 ~\u002F.bash_functions 的新文件,然後讓你的 .bashrc 加載它:\u003C\u002Fp\u003E\u003Cpre\u003Eif [ -e $HOME\u002F.bash_functions ]; then\u003Cbr\u003E source $HOME\u002F.bash_functions\u003Cbr\u003Efi\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E在該函數文件中,添加這些代碼:\u003C\u002Fp\u003E\u003Cpre\u003Efunction cl() {\u003Cbr\u003E DIR=\"$*\";\u003Cbr\u003E # if no DIR given, go home\u003Cbr\u003E if [ $# -lt 1 ]; then \u003Cbr\u003E DIR=$HOME;\u003Cbr\u003E fi;\u003Cbr\u003E builtin cd \"${DIR}\" && \\\u003Cbr\u003E # use your preferred ls command\u003Cbr\u003E ls -F --color=auto\u003Cbr\u003E}\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E將函數加載到 Bash 會話中,然後嘗試:\u003C\u002Fp\u003E\u003Cpre\u003E$ source ~\u002F.bash_functions\u003Cbr\u003E$ cl Documents\u003Cbr\u003Efoo bar baz\u003Cbr\u003E$ pwd\u003Cbr\u003E\u002Fhome\u002Fseth\u002FDocuments\u003Cbr\u003E$ cl ..\u003Cbr\u003EDesktop Documents Downloads\u003Cbr\u003E[...]\u003Cbr\u003E$ pwd\u003Cbr\u003E\u002Fhome\u002Fseth\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E函數比別名更靈活,但有了這種靈活性,你就有責任確保代碼有意義並達到你的期望。別名是簡單的,所以要保持簡單而有用。要正式修改 Bash 的行爲,請使用保存到 PATH 環境變量中某個位置的函數或自定義的 shell 腳本。\u003C\u002Fp\u003E\u003Cp\u003E附註,有一些巧妙的奇技淫巧來實現 cd 和 ls 序列作爲別名,所以如果你足夠耐心,那麼即使是一個簡單的別名也永無止限。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E開始別名化和函數化吧\u003C\u002Fh1\u003E\u003Cp\u003E可以定製你的環境使得 Linux 變得如此有趣,提高效率使得 Linux 可以改變生活。開始使用簡單的別名,進而使用函數,並在評論中發佈你必須擁有的別名!\u003C\u002Fp\u003E\u003Chr\u003E\u003Cp\u003Evia: https:\u002F\u002Fopensource.com\u002Farticle\u002F19\u002F7\u002Fbash-aliases\u003C\u002Fp\u003E\u003Cp\u003E作者: Seth Kenlon 選題: lujun9972 譯者: wxy 校對: wxy\u003C\u002Fp\u003E\u003Cp\u003E本文由 LCTT 原創編譯, Linux中國 榮譽推出\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E點擊“瞭解更多”可訪問文內鏈接\u003C\u002Fh1\u003E\u003C\u002Fdiv\u003E"'.slice(6, -6), groupId: '6720850961830511115
相關文章