"\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
相关文章