使用别名和bashshell函数创建自己的Linux命令。驯服重复性的任务,截断冗长的进程,并用您经常使用且难以记住的选项配置标准命令。
别名和shell脚本是Linux和类Unix操作系统中的强大技术,允许您将命令行体验磨练为您想要的。您可以定义自己的命令来满足您的特定需求,并减轻重复性任务的负担。
别名和shell脚本做同样的工作。它们允许您定义和命名一组bashshell功能,然后可以根据您给它的名称来调用这些功能。键入名称比每次要使用时都必须键入所有步骤或命令更简单、更方便。
别名和脚本的区别在于复杂性和规模。脚本更擅长保存更长更复杂的代码块。别名非常适合保存较短、更简洁的命令集。
有些别名是为您预定义的。要查看系统中定义的别名列表,请使用不带参数的alias命令:
alias这些是本文研究的Ubuntu测试机上定义的别名。如果我定义了任何自定义别名,它们也会出现在这个列表中。
在列表的顶部,有一个看起来很复杂的别名alert。我们一会儿再说。ls命令有一堆不同的别名,还有一组别名为grep系列命令提供颜色输出。例如,定义了这些别名后,无论何时键入:
grep系统将其解释为:
grep --color=auto这显示了别名的一个重要点。它们可以与现有命令同名。它们甚至可以在自己内部包含原始命令。
下面是grep别名的定义。
alias grep='grep --color=auto'这个别名的主体只是使用--color=auto选项调用grep命令。
作为一个简短的旁白,为了让您知道它的作用,alert别名用于让您知道命令何时完成。它还指示命令是否成功完成。它在屏幕顶部提供图形系统警报。
下面是一个简单的例子。sleep命令将休眠5秒钟,然后调用警报别名。别名检查上一个命令的响应。它从历史文件中提取最后一个命令。它决定命令是否成功完成。然后在系统警报中显示结果。
如果命令按预期完成,则系统警报中的图标是一个小的终端窗口。如果命令返回错误代码,则系统警报中的图标为红色错误图标。
sleep 5; alert五秒钟后,我们看到系统警报:
图标是一个小的终端窗口,意味着一切顺利。让我们用一个我们知道会失败的命令再试一次:
DoomedToFail; alert我们的系统警报现在有一个错误图标。
如我们所见,要定义别名,我们使用alias命令。
我们将为clear命令创建一个假名。我们的别名将被称为cls,它将调用clear命令。
我们的别名定义非常简单,不能保证用单引号括起来。如果别名的正文比这个更复杂,或者它包含空格,请用单引号将其括起来。我们将定义别名,使用ls在终端窗口中输入一些输出,然后使用新的别名cls清除屏幕。
alias cls=clear ls -l cls屏幕被清除。成功,虽然短暂。只有此终端窗口保持打开状态,别名才能继续存在。一旦窗口关闭,别名将消失。
那么我们如何使我们的别名永久化呢?
您可能想知道预打包的别名是在哪里定义的。它位于主文件夹的“.bashrc”文件中。当您启动交互式shell时,将读取此文件并执行其中的命令。也就是说,当您打开终端窗口时。
在主文件夹中键入以下命令以查看带有语法高亮显示的“.bashrc”文件的内容。
gedit .bashrc这将启动gedit编辑器并加载“.bashrc”文件。
突出显示的区域显示定义别名的两个区域。
滚动文档将显示与别名相关的其他两个部分:
第一个是警报别名的定义。第二个是if语句。它的意思是,“如果文件“.bash\u别名”存在,请读入它。”
如果您只想定义几个别名,可以将它们放在“.bashrc”文件中。把它们塞进包含ls别名的部分下面。
如果您要创建许多别名,或者您只是喜欢将别名封装在自己的文件中,您可以在“.bash\u aliases”文件中定义它们。在“.bash\u aliases”文件中创建它们的一个优点是,您不会意外更改“.bashrc”文件中的任何设置。另一个优点是,别名很容易复制到新系统,因为它们完全脱离了“.bashrc”文件。
在创建“.bash\u aliases”文件之前,它将不存在。可以使用以下命令创建文件:
touch .bash_aliases让我们编辑这个文件并给它添加几个别名。此命令将在gedit编辑器中打开“.bash\u别名”文件。
gedit .bash_aliases我们加了三个别名。第一个是我们之前使用的cls别名。下一个叫做h,是调用history命令的简写方式。
第三个别名叫做ftc。这代表“文件类型计数”
这个别名更复杂,所以它被包装在单引号中。它使用由管道连接在一起的一系列命令。它生成不同文件扩展名和目录名的排序列表,每个列表项都有一个计数。
相关:如何在Linux上使用管道
当我们保存了“.bash\u aliases”文件时,我们可能希望我们的别名是活动的和可访问的。事实并非如此。在别名定义生效之前,Bash shell必须读入该文件。每当打开交互式shell时,都会执行此操作。
我们还可以使用bashshell内置的。读取和执行文件中的命令。因为在处理“.bashrc”时读入了“.bash\u别名”文件,所以我们应该通过调用“.bashrc”来执行测试。这样我们就可以检查“.bash\u alias”文件是否从“.bashrc”调用,以及我们的别名是否有效。
我们使用的命令有:
gedit .bash_alias编辑“.bash\u alias”文件。
. .bashrc这将读入并执行“.bashrc”中的命令,该命令将调用“.bash\u alias”。
ftc这将调用ftc别名。
我们的别名响应,这意味着Bash已经读入了“.bashrc”和“.Bash\u别名”,我们的新别名现在处于活动状态。
现在,您可以继续向“.bash\u aliases”文件添加新的别名。如果你发现自己做的事情不止一次或两次,可以考虑给它取个别名。
有一个删除别名的命令,这样BAsh既不会识别别名,也不会响应别名。令人耳目一新的直率,命令被称为unalias。
要使用它,请提供希望Bash忘记的别名的名称。要使Bash忘记我们的ftc别名,请使用如下unalias:
unalias ftc可以使用unalias删除已定义的别名和任何预定义的别名。
要从系统中删除所有别名,请使用-a(all)选项:
unalias -a不过,Bash的记忆丧失不会是永久性的。下次打开终端窗口时,“忘记的”别名将返回。要真正清除它们,您需要将它们从“.bashrc”和“.bash\u alias”文件中删除。
如果你想把它们拿回来,不要从“.bashrc”文件中删除它们。相反,通过在每个别名行的开头添加一个散列来注释它们。要使“.bash\u alias”文件无效,请重命名它。如果“.bashrc”文件看不到它,它就不会读入它。逆转这些步骤来恢复别名是一件小事。
像别名一样,bashshell函数可以在“.bashrc”文件中定义,但是将它们放在自己的定义文件中通常更整洁。我们将其命名为“.bash\u函数”,遵循用于“.bash\u别名”文件的约定。
这意味着我们需要告诉“.bashrc”文件读入我们的定义。我们可以复制并修改在“.bash\u aliases”文件中读取的代码片段。启动gedit并用以下命令加载“.bashrc”文件:
gedit .bashrc您需要添加下面显示的突出显示部分。
您可以高亮显示alias部分并按Ctrl+C,然后移动到需要新部分的位置并按Ctrl+V粘贴文本副本。然后您只需将“.bash\u别名”更改为“.bash\u函数”
我们可以保存这些更改并关闭gedit。
现在我们将创建并编辑“.bash\u functi***”文件,并在其中放置函数定义。
touch .bash_functi*** gedit .bash_functi***这将在gedit中打开空的“.bash\u functi***”文件。
我们将添加一个简单的函数。up将采用单个命令行参数,即数字。up将呼叫cd。。那么多次。所以,如果你使用命令
up 2向上呼叫cd。。两次并将在目录树中向上移动两级。
定义函数有不同的方法。这里有一个:
function up() {word函数是可选的。如果你是一个传统主义者,使用它,如果你不介意输入它,就不用输入了。
下面是我们在gedit中的全部功能:
function up() {这标志着函数定义的开始,它将函数命名为up。
levels=$1这将创建一个名为levels的变量,并将其设置为第一个参数的值。这个参数将是用户在调用函数时提供的一个数字。$1表示“第一个命令行参数”
while [ "$levels" -gt "0" ]; do然后我们进入一个循环。这可以理解为“当levels的值大于零时,执行循环体中包含的操作”
在循环体内部,我们有两个命令。他们是:
cd ..在目录树中上移一级。
levels=$(($levels - 1))将levels设置为一个新值,该值比当前值小一个。
然后我们回到循环的顶部,再次比较levels和zero的值。如果levels大于零,则再次执行循环体。如果它不大于零,循环就结束了,我们跳转到done语句,函数就结束了。
保存这些更改并关闭gedit。
我们将读入并执行“.bashrc”中的命令,它应该读入并执行“.bash\u函数”文件中的命令。
. .bashrc我们可以通过移动到目录树中的某个位置并使用up移回目录树中的“更高”点来测试该函数。
cd ./work/backup/ up 2功能正常。我们把目录树移到了更高的两级。
在构建别名套件和函数库时,可能很难记住特定命令是别名还是函数。您可以使用type命令来提醒您。很酷的一点是,你也可以看到它的定义。
让我们在ftc别名和up函数中使用type。
type ftc type up我们得到一个非常有用的提示,告诉我们每个命令是什么类型的,以及它们的定义。
别名和函数可以极大地加快命令行的使用速度。它们可以缩短命令序列,并允许您烘焙始终与标准命令一起使用的选项。
每次看到漂亮的单行线或有用的函数时,都可以对其进行调整和个性化,然后将其添加到“.bash\u别名”或“.bash\u函数”文件中。
...它们的脚本可以执行与这些命令完全相同的操作,但使用别名将旧命令名“连接”到新cmdlet。 ...
... 让我们看看什么是符号链接,如何在Linux以及macOS和Windows上创建符号链接,为什么需要这种特殊类型的快捷方式,等等。 ...
...载和卸载加密的文件系统,并进一步简化过程。 相关:如何在Linux上创建别名和Shell函数
...出显示的文本。 向下滚动,您将看到页面的不同元素是如何着色的。 多用与少用非常相似,但也有一些不同。在most中按H可查看键绑定及其函数的列表。 用更少的颜色 如果你不想安装另一个寻呼机或必须学习新的按键,有一...
...的内容上,而不是和一组晦涩难懂的宏作斗争。 相关:如何使用Linux的man命令:隐藏的秘密和基础 潘多克前往救援 pandoc程序读取标记文件并生成大约40种不同标记语言和文档格式的新文件,包括手册页。它完全改变了手册页的...
...覆盖默认值,但在许多情况下,它们对您有利。 相关:如何使用所有Linux的搜索命令 安装fd 由于ubuntu19.04(Disco Dingo,),您可以通过使用apt get调用官方维护的包来直接安装fd。如果您运行的是较旧版本的Ubuntu,请查看Git hub页面...
...小又简单。 在使用Linux计算机的第一个小时内,您将学习如何使用Bash和其他shell附带的cd命令。也许您以前有在其他操作系统上使用它的经验,不需要解释。它会改变当前的工作目录,对吗?还有什么要知道的? 好吧,比你想象...
...还可以显著加快在命令行上导航目录的过程。我们将教你如何使用它们。 什么是推送和弹出(pushd and popd)? BillJoy在其1978年的C Shell中的创新之一是目录堆栈的概念和操作方法:pushd和popd。模仿是最真诚的奉承,目录堆栈、pushd...
...但这并没有什么不好的地方。我们将解释它的作用,以及如何调整它。 什么是$path,它是如何工作的($path on linux, and how does it work)? 当您在终端窗口中键入一个命令并按Enter键时,您甚至在执行命令之前就开始了大量的活动。 B...