创建接受参数的 bash 别名
概述
在使用 Bash 脚本或 Unix/Linux 命令行工具时,我们经常一遍又一遍地编写相同的命令行。通常,这些命令行很长,并且必须重复多次。例如,每天登录远程服务器、将本地文件夹复制到远程服务器或在目录中搜索隐藏文件或目录。
您可以使用 alias 命令创建别名。在本指南中,我将向您展示如何在 Linux 上创建接受参数的别名。如果您想重复运行单个命令而不必每次都键入它,这将非常有用。
创建 Bash 别名
别名帮助我们为复杂的 Linux 命令和 shell 脚本创建替代名称。要创建别名,只需使用以下语法:
alias <alias_name>="<command to run>"
例如,如果我们想列出当前目录中的所有文件和文件夹,我们可以使用名为 l 的别名。
alias l="ls -alrt"
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
创建带参数的别名
有时我们希望创建接受参数的别名。由于 alias 命令不直接接受参数,因此我们必须创建一个 bash 函数。Bash 函数的语法如下:
<function_name> { <commands> } OR function <function_name> { <commands> }
我们通过使用 $1、$2...$n 作为变量来定义函数,以识别传递给函数的参数。$0 是一个特殊变量,它标识函数本身的名称。以下是一个名为 mkcd 的函数示例:
~soft $ mkcd() { mkdir -p -- "$1" && cd -P -- "$1"; } ~soft $ pwd /var/home/user/soft ~soft $ mkcd newdir ~newdir $ pwd /var/home/user/soft/newdir
注意 - Bash 别名是在 Bash shell 中将一个文本替换为另一个文本的方法。例如,考虑前面描述的别名 l。我们将使用 'l' 来列出文件系统中某个目录中可用的文件。
[~user ]$ l Pictures/ total 308 drwx------. 1 user user 504 May 25 20:33 .. drwxrwxr-x. 1 user user 42 Jun 4 13:02 old drwxr-xr-x. 1 user user 312 Jun 4 13:02 new -rw-r--r--. 1 user user 154716 Jun 4 13:03 a.png drwxr-xr-x. 1 user user 168 Jun 8 09:43 . -rw-r--r--. 1 user user 156060 Jun 8 09:43 b.png
如果您想查看当前打开的文件,请使用 ls -alrt 而不是 l。由于我们是在别名之后直接传递文件路径,因此这里不需要任何函数。
删除别名
您可以使用 unset 命令删除 shell 变量的现有定义。alias 命令的语法非常简单:
unalias <alias_name> For example, if we want to remove the 'l' alias from our current bash session, we could use the following command: unalias l
我们将使用 unset 命令从当前 Bash 会话(如果有)中删除已定义的 Bash 函数。UNSET 命令的语法也很简单:
unset <function_name>
例如,我们可以通过键入以下内容从当前 Bash 会话中删除 'mkcd' 函数:
unset mkcd
创建永久别名
如果您使用命令行创建别名,它将仅在当前 bash 会话中有效。我们希望使别名在所有 bash 会话中都可用,因此我们将将其添加到 ~/.bash_profile 或 ~/.bashrc 中。
我们将在 ~/.bashrc 配置文件中添加该命令的别名:
# Aliases # alias alias_name="<command to run>" # Long format list alias l="ls -alrt"
保持别名简短易记!我们建议为每个别名添加注释,以便以后更容易参考。
结论
我们了解了 alias(或简称“别名”)命令,包括为什么以及何时使用它们。我们已经看到了在 Bash Shell 中定义别名的语法,并确定了一些我们可能希望使用 bash 函数来定义它们的情况。我们讨论了如何永久创建新的别名以及如何从当前 bash 会话中删除它。