Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名

这篇具有很好参考价值的文章主要介绍了Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

  1. 0 前言
  2. 1 定义别名
  3. 2 查看别名
    1. 2.1 查看所有别名
    2. 2.2 查看某个别名
      1. 2.2.1  alias 别名
      2. 2.2.2 alias | grep 别名字符串
      3. 2.2.3 使用 Ctrl+Alt+E 组合键
  4. 3 unalias:删除别名
  5. 4 如何执行命令本身而非别名
    1. 4.1 方法1:使用 Ctrl+Alt+E 组合键  && unalias
    2. 4.2 方法2:在命令前加上命令文件的绝对路径
    3. 4.3 方法3:在命令前加上相对路径
    4. 4.4 方法4:在命令前加上反斜线\
  6. 5 如何让别名永久有效
  7. 6 为何推荐使用单引号
  8. 7 参考资料

0 前言

记得在DOS中有个doskey命令,使用doskey命令可以定义宏,宏的的执行优先级是最高的,比DOS的内置命令还高(DOS中的命令执行优先级从高至低依次是:宏命令、DOS内部命令,以com为扩展名的可执行程序,以exe位扩展名的可执行程序、以bat位扩展名的批处理程序)。

这就意味着,如果你定义的宏与dos的内置命令同名,比如dir,当你在命令行输入dir时,系统会优先执行你宏,而不是dos的内置命令,这为我们提供了修改内部命令功能的途径。

那以Linux中是否提供有相似的功能呢?

1 定义别名

在Linux中,我们使用alias命令来定义命令别名。格式如下:

alias [命令别名[=值]]

与定义变量相似,在定义命令别名时,要注意:

  • 等号(=)前后不能有空格,否则就会出现变成比较,引起语法错误
  • 如果值中有空格或tab,则值一定要使用单引号、双引号括起来(推荐单引号)

2 查看别名

2.1 查看所有别名

要查看所有别名,直接输入 alias 命令,不加任何选项和参数即可:

purpleEndurer @ bash $alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
purpleEndurer @ bash $

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

当前定义有6个命令别名 

2.2 查看某个别名

要查看某个别名,有几种方法。

2.2.1  alias 别名

例2.2.1.1 要查看名为abc的别名,就用命令:alias abc

purpleEndurer @ bash $alias abc
bash: alias: abc: not found

 Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

由于系统中不存在名为abc的别名,所以系统反馈 not found

例2.2.1.2 要查看名为ls的别名,就用命令:alias ls

purpleEndurer @ bash $alias ls
alias ls='ls --color=auto'

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

可见我们在命令行使用的ls命令,其实是带有 参数的ls命令。

这就意味着,有些命令的选项,我们经常使用,但又不是命令默认选项,那么我们就可以通过定义别名来实现,这样就不需要每次都输入那些选项了。

  • 注意:alias查看别名不支持通配符

例如,要查找所有l开头的别名:

purpleEndurer @ bash $alias l*
bash: alias: l*: not found

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

2.2.2 alias | grep 别名字符串

例如,我们要查找所有包含ls的别名:

purpleEndurer @ bash $alias | grep ls*
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
purpleEndurer @ bash $

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

由于grep支持正则表达式,因此我们还可以使用正则表达式来获取符合条件的命令别名。

例2.2.2.1 获取以ls开头,后面可以接字母、数字、下划线或者汉字的命令别名:

purpleEndurer @ bash $ alias | grep "\bls\w*="
alias ls='ls --color=auto'

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

命令中的字符串"\bls\w*="为正则表达式,其中:

  1. \b 匹配单词的开始或结束
  2. \w 字母、数字、下划线或者汉字

这样只找到一个匹配的命令别名。

例2.2.2.2 获取以l开头,后面可以接字母、数字、下划线或者汉字的命令别名:

purpleEndurer @ bash $ alias | grep "\bl\w*="
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

这样找到了两个匹配的命令别名。

例2.2.2.3 获取以l开头,后面可以接除换行符之外的任意字符的命令别名:

purpleEndurer @ bash $ alias | grep "\bl.*="
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

命令中正则表达式 "\bl.*=" 中 的

  • . 代表除换行符之外的任意字符

2.2.3 使用 Ctrl+Alt+E 组合键

在终端命令行中输入一个命令后,按下 Ctrl+Alt+E 组合键,假如设置了别名,那么别名自动会变成实际的命令。

例 2.2.3.1 在终端命令行中先输入命令alias查看当前所有的命令别名,再输入命令ls,再按Ctrl+Alt+E,看看实际的命令是什么?

purpleEnduer @ bash $ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
purpleEnduer @ bash $ ls --color=auto

 Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

我们先在命令行中输入alias查看当前所有的命令别名,可以看到ls命令别名对应的实际命令是:'ls --color=auto'

然后在命令行中输入ls,接着按Ctrl+Alt+E,这时命令行上的命令变成了ls --color=auto

注意:

  • 这个快捷键并非在所有终端中都可行,有些终端的快捷键会和这个快捷键冲突,这样的话,该方法就不好使了。

3 unalias:删除别名

命令别名定义的太多了,往往带来的不是方便,而是困扰。所以我们也需要掌握删除别名的方法。

要删除一个别名,可以使用 unalias 命令,其命令格式为:

unalias [-a] 别名1 [别名2 ...]

其中:

  • -a 的选项可以删除所有已定义的命令别名。

例3.1 删除命令别名 egrep

purpleEndurer @ bash $ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
purpleEndurer @ bash $ unalias egrep
purpleEndurer @ bash $ alias
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
purpleEndurer @ bash $ 

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

我们先用alias命令查看当前所有的命令别名,可以看到命令别名egrep

然后用命令unalias egrep来删除命令别名egrep

再用alias命令查看当前所有的命令别名,这次看不到命令别名egrep了。

例3.2 删除命令别名 egrep 、fgrep 和 grep

purpleEndurer @ bash $ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
purpleEndurer @ bash $ unalias egrep fgrep grep
purpleEndurer @ bash $ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
purpleEndurer @ bash $ 

 Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

我们先用alias命令查看当前所有的命令别名,可以看到命令别名egrep 、fgrep 和 grep

然后用命令unalias egrep fgrep grep 来删除命令别名egrep 、fgrep 和 grep

再用alias命令查看当前所有的命令别名,这次看不到命令别名egrep 、fgrep 和 grep了。

例 3.3 删除所有命令别名

purpleEndurer @ bash $ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
purpleEndurer @ bash $ unalias -a
purpleEndurer @ bash $ alias
purpleEndurer @ bash $ 

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

我们先用alias命令查看当前所有的命令别名,可以看到命令别名l. 、ll 和 ls

然后用命令unalias -a 来删除所有命令别名

再用alias命令查看当前所有的命令别名,这次看不到任何命令别名了。

4 如何执行命令本身而非别名

别名虽好使,但也有弊端,比如定义的别名恰好和某个命令重名了,hell 中执行的将永远都是别名。

在这种情况下,如果我们想执行真正的那个命令而非别名,该怎么办呢?有四种方法可以解决这个问题:

4.1 方法1:使用 Ctrl+Alt+E 组合键  && unalias

在终端命令行中输入一个命令后,按下 Ctrl+Alt+E 组合键,假如设置了别名,那么别名自动会变成实际的命令,如果实际的命令跟我们想要执行的不一致,那么,我们可以使用unalias删除别名定义,之后我们输入和执行的就是实际的命令了。

4.2 方法2:在命令前加上命令文件的绝对路径

例如,pwd命令的功能是显示当前工作目录。

当我们使用命令 alias pwd='ls' 定义了变量别名后,输入pwd回车,显示的就是ls的命令执行结果。

这时要想继续执行原始的pwd命令,那么我们可以在pwd命令前加上命令对应的文件的绝对路径,即:/bin/pwd

purpleEnduer @sh /bin $ pwd
/bin
purpleEnduer @sh /bin $ alias pwd='ls'
purpleEnduer @sh /bin $ pwd
ash        dumpkmap    1inux64        ping6        sync
busybox        echo        ln        printeny    tar
busybox.suid    egrep        login        ps        touch
cat        false        ls        pwd        true
chgrp        fdflush        mkdir        rev        umount
chmod        fgrep        mknod        rm        uname
chown        getopt        mktemp        rmdir        uncompress 
cp        grep        more        rpm        usleep
cpio        gunzip        mount        sed        vi
date        gzip        mv        setarch        watch
dd        hostname    netstat        sh        zcat
df        ipcalc        nice        sleep
dmesg        kill        pidof        stty
dnsdomainame    1inux32        ping        su
purpleEnduer @sh /bin $ /bin/pwd
/bin

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

 

4.3 方法3:在命令前加上相对路径

除了使用增加绝对路径这种方式外,也可以使用增加相对路径这种方式。

例如:

执行pwd命令,可知当前工作目录为 /home/tc

当我们使用命令 alias pwd='ls' 定义了变量别名后,输入pwd回车,显示的就是ls的命令执行结果。由于/home/tc没有文件和目录,所以命令没有结果显示。

pwd命令对应的文件位于/bin中,

这时要想继续执行原始的pwd命令,除了加上绝对路径即:/bin/pwd

还可以加上相对路径,即: ../../bin/pwd 

purpleEnduer @sh ~ $ pwd
/home/tc
purpleEnduer @sh ~ $ alias pwd='ls'
purp leEnduer @sh  $ pwd
purp leEnduer @sh $ ../../bin/pwd 
/home/tc
purpleEnduer @sh $ /bin/pwd 
/home/tc

purp leEnduer @sh 

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

 使用绝对路径还是相对路径,主要是看二者中哪个更短 ,这样可以少输一些字符^_^

4.4 方法4:在命令前加上反斜线\

例如:

在pwd命令别名存在的情况下,我们要执行实际的pwd命令,可以使用命令:\pwd

purpleEnduer @sh ~ $ pwd
/home/tc
purpleEnduer @sh ~ $ alias pwd='ls'
purpleEnduer @sh $ pwd
purpleEnduer @sh~$ /pwd
-sh: /pwd: not found
purpleEnduer @sh ~ $ \pwd
/home/tc
purpleEnduer @sh $

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

 

5 如何让别名永久有效

我们通过 alias 命令设置的别名,仅限于在当前 Shell 中使用,如果系统重启了,那么新设置的别名就失效了。

如果想让别名永久有效的话,就需要把所有的别名加入到($HOME)目录下的 .alias 文件中。

如果你的系统中没有这个文件,你可以创建一个。

然后在 .bashrc 文件中增加这样一段代码:

# Add my aliases
if [ -f ~/.alias ]; then
  . ~/.alias
fi

这样设置后,无论怎样重启系统,.alias 中的别名都有效。

6 为何推荐使用单引号

环境变量PWD保存了当前工作目录的绝对路径,我们可以利用它来了解当前工作目录。

我们先看下面这个命令序列:

purpleEndurer @ bash ~ $ echo $PWD
/home/csdn

可见当前工作目录为 /home/csdn

然后我们定义了别名mypwd="echo $PWD"并执行:

purpleEndurer @ bash ~ $ alias mypwd="echo $PWD"
purpleEndurer @ bash ~ $ mypwd
/home/csdn

别名mypwd执行的结果与 echo $PWD命令是相同的。

接下来,我们把当前工作目录变成/home/csdn/a

purpleEndurer @ bash ~ $ cd a

执行命令  echo $PWD:


purpleEndurer @ bash ~/a $ echo $PWD
/home/csdn/a

命令执行结果 正确。

再试试别名 mypwd:


purpleEndurer @ bash ~/a $ mypwd
/home/csdn

结果不对。

为什么不对了呢?我先看看别名mypwd实际执行的命令:


purpleEndurer @ bash ~/a $ alias mypwd
alias mypwd='echo /home/csdn'

看到了吗?由于我们在定义别名mypwd时使用了双引号,系统在创建这个别名时没有保留p字符串$PWD,而是把它替换成了 PWD的值  /home/csdn。

这样,不管当前工作目录如何变化,别名mypwd始终显示的是 /home/csdn。

找到原因后,我们改用单引号来定义,再查看mypwd实际执行的命令:

purpleEndurer @ bash ~/a $ alias mypwd='echo $PWD'

purpleEndurer @ bash ~/a $ alias mypwd
alias mypwd='echo $PWD'

使用单引号来定义后,$PWD成功保存下来了,没有被替换为它的值。

我们再执行这个别名看看:

purpleEndurer @ bash ~/a $ mypwd
/home/csdn/a 

这次执行结果正确了。

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名,Linux世界,麒麟操作系统,编程资料,linux,shell脚本,shell编程,alias,unalias,doskey

7 参考资料

doskey | Microsoft Learnhttps://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/doskey文章来源地址https://www.toymoban.com/news/detail-752390.html

到了这里,关于Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux shell编程学习笔记29:shell自带的 脚本调试 选项

    Linux shell脚本的调试方法比较多,上次我们探讨和测试了shell内建命令set所提供的一些调试选项,其实 shell 本身也提供了一些调试选项。我们以bash为例来看看。 purleEndurer @ csdn ~ $ bash --help GNU bash, version 4.2.46(2)-release-(x86_64-redhat-linux-gnu) Usage:  bash [GNU long option] [option] ...      

    2024年02月04日
    浏览(40)
  • Linux shell编程学习笔记39:df命令

    0 前言 1  df命令的功能、格式和选项说明 1.1 df命令的功能 1.2 df命令的格式 1.3 df命令选项说明  2 df命令使用实例  2.1  df:显示主要文件系统信息 2.2 df -a:显示所有文件系统信息 2.3 df -t[=]TYPE或--type[=]TYPE:显示TYPE指定类型的文件系统信息 2.4 df --total:追加显示统计信息 2

    2024年01月16日
    浏览(46)
  • Linux shell编程学习笔记36:read命令

     *更新日志  *2023-12-18 1.根据[美] 威廉·肖特斯 (Willian shotts)所著《Linux命令行大全(第2版)》                         更新了-e、-i、-r选项的说明                       2.更新了 2.8 的实例,增加了gif动图                       3.补充了-i的应用实例 2.12 目录 目录

    2024年02月04日
    浏览(36)
  • Linux shell编程学习笔记47:lsof命令

    今天国产电脑提示磁盘空间已耗尽,使用用df命令检查文件系统情况,发现/dev/sda2已使用100%。 Linux shell编程学习笔记39:df命令 https://blog.csdn.net/Purpleendurer/article/details/135577571 于是开始清理磁盘空间。 第一步是查看已删除、但空间却没有释放的进程。 这里要用到 lsof命令。

    2024年04月27日
    浏览(36)
  • Linux shell编程学习笔记33:type 命令

     目录 0 引言 1 type 命令的功能和格式 1.1 type命令的功能 1.2 type 命令的格式 2 type命令用法实例 2.1用type命令查看shell内置命令(以echo命令为例) 2.2 用type命令查看别名(以ls命令为例) 2.3 用type命令同时查看shell内置命令和别名(以echo和ls命令为例) 2.4 用type命令查看外部

    2024年02月03日
    浏览(44)
  • Linux shell编程学习笔记41:lsblk命令

    边缘计算面临着数据安全与隐私保护、网络稳定性等挑战,但同时也带来了更强的实时性和本地处理能力,为企业降低了成本和压力,提高了数据处理效率。因此,边缘计算既带来了挑战也带来了机遇,需要我们不断地研究 前几节学习我们均涉及到磁盘和文件存储,今天我们

    2024年01月24日
    浏览(39)
  • Linux shell编程学习笔记40:stat命令

    “程序员必备的面试技巧,就像是编写一段完美的代码一样重要。在面试战场上,我们需要像忍者一样灵活,像侦探一样聪明,还要像无敌铁金刚一样坚定。只有掌握了这些技巧,我们才能在面试的舞台上闪耀光芒,成为那个令HR们心动的程序猿!” 目录 0 前言 1 DOS、Wind

    2024年01月19日
    浏览(44)
  • Linux shell编程学习笔记24:函数定义和使用

    *20231113 补充了实例使用for循环来简化代码的内容 为了实现模块化设计和代码重用,很多编程语言支持函数或过程,Linux shell也支持函数定义和调用。 Linux shell中的函数与其它编程语言很多有相似之处,也有自己独特之处。 其中: function是 Shell 中的,专门用来定义函数

    2024年02月05日
    浏览(47)
  • Linux shell编程学习笔记18:while循环语句

    上回我们研究和探讨了Linux shell编程中for 循环语句,与在C/C++中一样,for 循环语句Linux shell编程中有很多灵活的用法。今天我们来研究和探讨while循环语句。 我们继续以for循环语句中的例子,计算 从1到10与2的乘积 并输出。 1.在zsh命令行中 # csdn @ edu in ~ [20:35:57]  $ i=1; while

    2024年02月06日
    浏览(44)
  • Linux shell编程学习笔记17:for循环语句

    Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算,同样也需要进行根据条件进行流程控制,提供了if、for、while、until等语句。  之前我们探讨了if语句,现在我们来探讨for循环语句。 Linux Shell中的for语句十分灵活,格式多样,我

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包