Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么shell要执行别名而不是函数?

为什么shell要执行别名而不是函数?
EN

Stack Overflow用户
提问于 2021-01-18 23:36:17
回答 3查看 177关注 0票数 0

我在.bashrc中添加了一些别名,作为git命令的快捷方式。

一个例子是ga for git add

但是,当我对ga函数做了一些更改时,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function ga() {
  echo "hello"
}

并且在终端中使用ga,它还在使用git add

我试图通过编辑ga,然后使用source ~/.bashrc来注释掉.bashrc。但是,它仍然执行别名而不是函数。

原因是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-21 02:20:22

在定义别名时,必须考虑到在函数之前查找它们:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ alias hello="echo 'this is a hello alias'"
$ function hello() { echo "this is a hello function"; }
$ hello
this is a hello alias
#               ^^^^^  <--- it executes the alias, not the function!

那么调用函数的方法是什么呢?只需在名称之前使用。它将绕过别名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ \hello
this is a hello function
#               ^^^^^^^^  <--- it executes the function now

您还可以使用unalias,因此可以删除别名。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ unalias hello
$ hello
this is a hello function
#               ^^^^^^^^

如果别名和函数有命令的名称怎么办?然后使用command就方便了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ alias date="echo 'this is an alias on date'"
$ function date() { echo "this is a function on date"; }
$ date
this is an alias on date
#          ^^^^^              <--- it executes the alias, not the function!
$ \date
this is a function on date
#         ^^^^^^^^            <--- it executes the function
$ command date
Thu Jan 21 10:56:20 CET 2021
# ^^^^^^^^^^^^^^^^^^^^^^^^^   <--- it executes the command

您也可以使用nice

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ nice -n0 date
Thu Jan 21 10:56:20 CET 2021

别名与函数与脚本所示

在函数之前查找别名:如果同时有一个函数和一个名为foo的别名,则foo调用别名。(如果要扩展别名foo,则会暂时阻塞它,这会使类似于alias ls='ls --color'的事情正常工作。而且,通过运行\foo,您可以在任何时候绕过别名。)不过,我不希望看到一个可衡量的性能差异。

进一步读:

票数 2
EN

Stack Overflow用户

发布于 2021-01-19 05:54:18

我找到了一个回答。我使用unalias消除了ga的混叠

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
unalias ga

ga() {
  echo "ZAWARUDO"
}
票数 1
EN

Stack Overflow用户

发布于 2021-01-19 00:09:40

你忘了删除旧的定义。最简单的方法就是打开一个新的交互式bash。与其采购.bashrc,不如做一个简单的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bash

当然,这意味着函数/别名/非导出变量(您在当前shell中手动定义了)也会丢失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65787149

复制
相关文章
分布式锁为什么要选择Zookeeper而不是Redis?
在分布式的应用中,为了防止单点故障,保障高可用,通常会采用主从结构,当主节点挂掉后,从节点可以代替主节点提供服务。
烂猪皮
2021/06/10
9781
为什么建议普通人要用AI学而不是要学AI
上面这句话是我在一场面试中,面试官告诉我的。虽然面试意料之中的挂了,但是这句话确实对我产生了巨大的影响。
做数据的二号姬
2023/09/06
3020
为什么建议普通人要用AI学而不是要学AI
工程系的学生为什么要学Wolfram语言而不是Matlab
Matlab 类似于 Fortune 和 C 代码,估计一般的小朋友是没有兴趣学的。Mathematica 是函数式编程,当然也支持过程式编程,还有对象编程、基于规则等的编程。更绝的是支持自然输入,你不需要学语言的,告诉它你想干啥,人家自然就给你答案啦,这绝对超过博士生的脑袋。
WolframChina
2019/12/20
1.9K0
Centos7 使用alias别名执行shell脚本
在日常的工作中,有些频繁的操作命令总会有需要重复敲的时候,那么有没有什么办法将这种操作简化呢?
Devops海洋的渔夫
2020/05/04
1.9K0
innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree
链表和数组相比,数组可以通过下标快速定位,或者通过二分查找,查询复杂度为O(logn),而链表只能按照顺序挨个查找,复杂度为O(n)。
大忽悠爱学习
2023/03/23
2.4K0
innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree
为什么建议你用nullptr而不是NULL?
在C语言中,我们常常用NULL作为指针变量的初始值,而在C++中,却不建议你这么做。
编程珠玑
2019/08/28
9.6K0
为什么建议使用你 LocalDateTime ,而不是 Date?
多线程并发如何保证线程安全 - 避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat对象 => 创建和销毁对象的开销大 - 对使用format和parse方法的地方进行加锁 => 线程阻塞性能差 - 使用ThreadLocal保证每个线程最多只创建一次SimpleDateFormat对象 => 较好的方法
芋道源码
2019/10/23
1.6K0
JDBC为什么要使用PreparedStatement而不是Statement
前言 这篇博客不是我写的,是由刘志军大大翻译的,真心觉得很棒,而且是必学要掌握的东西,所以就转载过来了,我个人的第一篇转载文章。 开始 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时Prepar
roobtyan
2018/06/04
1.4K0
为什么特征工程要用 SQL 而不是 Python
我们常说机器学习是一门实验科学。所以相比较传统工程而言,机器学习分成两个大的阶段:
用户2936994
2022/05/18
8270
为什么特征工程要用 SQL 而不是 Python
JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。下面是一个例子:
哲洛不闹
2018/09/19
1K0
JDBC为什么要使用PreparedStatement而不是Statement
为什么建议使用你LocalDateTime,而不是Date?
在项目开发过程中经常遇到时间处理,但是你真的用对了吗,理解阿里巴巴开发手册中禁用static修饰SimpleDateFormat吗?
良月柒
2019/10/28
1.4K0
为什么建议使用你LocalDateTime,而不是Date?
JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时PreparedStatement还经常会在Java面试被提及,譬如:Statement与PreparedStatement的区别以及如何避免SQL
java达人
2018/01/31
3.7K0
JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。下面是一个例子:
哲洛不闹
2018/09/19
9470
JDBC为什么要使用PreparedStatement而不是Statement
为什么我会选择 React 而不是 Vue?
你注意到我过于圆滑的标题了吗?我将依据我所喜欢的方式去构建这个对话,而不是我客观上认为的唇枪舌战。我想后者并不会起作用。
疯狂的技术宅
2019/03/27
1.4K0
为什么建议使用你 LocalDateTime ,而不是 Date?
来源:juejin.im/post/5d7787625188252388753eae
JAVA葵花宝典
2019/10/29
1.1K0
为什么建议你使用LocalDateTime而不是Date?
calendar是共享变量,并且这个共享变量没有做线程安全控制。当多个线程同时使用相同的SimpleDateFormat对象【如用static修饰的SimpleDateFormat】调用format方法时,多个线程会同时调用calendar.setTime方法,可能一个线程刚设置好time值另外的一个线程马上把设置的time值给修改了导致返回的格式化时间可能是错误的。在多并发情况下使用SimpleDateFormat需格外注意SimpleDateFormat除了format是线程不安全以外,parse方法也是线程不安全的。parse方法实际调用alb.establish(calendar).getTime()方法来解析,alb.establish(calendar)方法里主要完成了
Bug开发工程师
2020/03/12
2.1K0
为什么建议使用你 LocalDateTime ,而不是 Date?
来源:juejin.im/post/5d7787625188252388753eae
用户1516716
2019/10/24
1.1K0
为什么是int main()而不是void main()
这是基于我们学校老师一直使用void main(),而发的感慨,大一学习C语言时,我就在想,老师上课演示的为什么一直用void main(),而不是int main()呢?不为了偷懒?还是习惯性的语句呢?在查阅了部分大牛的博客,翻阅了C Primer Plus和C++ Primer Plus这两本圣经级别的书本之后,得出以下结论(有一部分是别人的结论,属于半转载),可能不太严谨,请多多包涵。
对弈
2019/09/04
3.7K0
工业4.0要“互联网+”而不是“+互联网”
如果说工业3.0要解决的是生产效率与消费效率之间的矛盾,那么“互联网+”为特征的工业4.0则很可能会打破先生产后消费的传统思维,甚至会让生产与消费之间的鸿沟逐步消除。 “互联网+”让互联网热再度袭来。
机器人网
2018/04/13
6830
工业4.0要“互联网+”而不是“+互联网”
为什么 useState 返回的是 array 而不是 object?
这里可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢?我们在自定义 hook 时应该返回什么类型呢?
小鑫
2022/04/26
2.3K0

相似问题

PHP执行函数而不是Shell执行函数

17

为什么RavenDB要执行OR操作而不是AND?

24

函数而不是C shell登录脚本中的别名

31

如何编写在python而不是shell中执行的ipython别名?

24

为什么NHibernate要执行插入而不是更新?

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文