bash shell中的">file"与": >file"讨论

本文探讨了在Linux与bash环境下,file与>file及:>file之间的区别,详细解释了这些命令的工作原理及其是否创建新进程的问题,并通过实际示例展示了命令的执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天群里在讨论这么个问题:

file和 : > file一样嘛?

file会产生新进程嘛?还是在某些平台等同于: > file?

 

 

手头上只有bash shell,以下内容限于linux& bash,其他平台不一定相同:

 

这种问题很纠结,看来了解shell的命令解析和执行永远是关健
在info bash里3.1.1有关于shell命令解析步骤描述指出:shell扩展之后紧接着是重定向,接着才是命令执行,

重定向不会创建进程,命令执行不一定创建进程,根据情况(关于子进程的创建前边有文章有提及)

说回问题
首先是">file",这是个不完整,但bash又接受的命令行,
说不完整,是因为这条命令没有用于执行的命令(command name)
但bash充许这种情况,见info bash:"3.7.1 Simple Command Expansion"一节
一般的shell命令在解析完后(包括标号
因为在命令解析时的重定向完后,shell发现没有命令符号了,这个命令就结束了,命令返回0


接着是": >file",这个是个完整的命令行
在命令解析步骤执行到重定向时,跟">file"是一样的
但是接下来的命令行执行,这行命令行的的执行体是:":",这个是个builtin命令
builtin的直接执行在当前shell进程下执行的
:buitin命令的功能很简单,即:在返回0

 

 

这二条命令,功能上是一样的

实现过程基本一样,第二条多了个builtin调用

这边可以做一种小动作让这二条命令的区别更加明显化:

将:定义成一个函数

[root@rac0 tmp]# :(){ echo hehe >&2; }
[root@rac0 tmp]# : >11121
hehe
[root@rac0 tmp]#

函数的直接用,也是不创建进程的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值