Shell学习(6/6) 输入/输出重定向-文件包含

Shell脚本学习指南(六)——输入/输出、文件与命令执行 本篇博客将完成介绍Shell语言。首先讨论的是文件:如何以不同的方式处理输入/输出和产生文件名。接着是命令替换,也就是让你使用一个命令的输出作为命令行的参数。然后,我们继续将重点放在命令行上,讨论Shell提供的各类引用。最后,则是深入讨论命令执行顺序,并针对内建于Shell里的命令作介绍。前面我们介绍过printf命令,下面我们将完整地介绍它。printf第一部分为描述符规格的字符串,它的最佳提供方式是放在引号内的字符串常数。第二部分为参数列表,例如字符串或变量值的列表,该列表需与格式规格相对应。 阅读详情

十一、输入/输出重定向

在 Shell 脚本中,输入/输出重定向是一种强大的功能,允许你将命令的输入和输出从默认的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)重定向到文件或其他命令。

1. 标准输出重定向 (> 和 >>)

  • >:将命令的标准输出重定向到文件。如果文件已存在,内容会被覆盖。
echo "Hello, World!" > output.txt

将 Hello, World! 写入 output.txt 文件。如果 output.txt 已存在,原有内容会被覆盖。

  • >>:将命令的标准输出追加到文件末尾。如果文件不存在,会创建新文件。
echo "Hello again!" >> output.txt

将 Hello again! 追加到 output.txt 文件的末尾,而不会覆盖原有内容。

2. 标准错误重定向 (2> 和 2>>)

  • 2>:将命令的标准错误重定向到文件。如果文件已存在,内容会被覆盖。
ls /nonexistent_directory 2> error.txt

如果目录不存在,错误信息会被写入 error.txt 文件。

  • 2>>:将命令的标准错误追加到文件末尾。如果文件不存在,会创建新文件。
ls /another_nonexistent_directory 2>> error.txt

错误信息会被追加到 error.txt 文件的末尾。

3. 同时重定向标准输出和标准错误 (&> 和 &>>)

  • &>:将标准输出和标准错误都重定向到文件。如果文件已存在,内容会被覆盖。
ls /nonexistent_directory &> output_and_error.txt

无论命令成功还是失败,输出和错误信息都会被写入 output_and_error.txt 文件。

  • &>>:将标准输出和标准错误都追加到文件末尾。如果文件不存在,会创建新文件。
ls /another_nonexistent_directory &>> output_and_error.txt

输出和错误信息会被追加到 output_and_error.txt 文件的末尾。

4. 标准输入重定向 (<)

  • <:将文件内容作为命令的标准输入。
wc -l < input.txt

会计算 input.txt 文件的行数。

5. 管道 (|)

  • |:将一个命令的标准输出作为另一个命令的标准输入。
ls -l | grep "txt"

这会列出当前目录下的所有文件,并将输出传递给 grep 命令,筛选出包含 txt 的行。

6. 重定向到 /dev/null

  • /dev/null:将输出或错误重定向到 /dev/null,相当于丢弃输出。
ls /nonexistent_directory 2> /dev/null

会将错误信息丢弃,不会显示在终端上。

7. Here Document (<<)

  • <<:用于将多行输入传递给命令。
cat << EOF
This is line 1.
This is line 2.
EOF

这会将两行文本传递给 cat 命令,输出如下:

8. Here String (<<<)

  • <<<:用于将字符串作为输入传递给命令。
grep "foo" <<< "foo bar baz"

这会将字符串 foo bar baz 作为输入传递给 grep 命令,输出 foo。

9. 重定向顺序(看不懂)

  • 重定向的顺序很重要。例如:
command > file 2>&1
  • 这会将标准输出和标准错误都重定向到 file。
command 2>&1 > file

这只会将标准输出重定向到 file,而标准错误仍然输出到终端。

10. 重定向到文件描述符(看不懂)

  • 可以使用文件描述符(如 3)来创建自定义的重定向。
exec 3> output.txt
echo "Hello, World!" >&3
exec 3>&-

这会将 Hello, World! 写入 output.txt 文件,然后关闭文件描述符 3。

十二、文件包含

在 Shell 脚本中,文件包含(File Inclusion)是指在一个脚本中引入并执行另一个脚本的内容。可以帮助你将代码模块化,提高代码的复用性和可维护性。Shell 本身并没有像其他编程语言(如 C 或 Python)那样的专门的文件包含机制,但可以通过以下几种方式实现类似的功能。

1. 使用 source 命令

source 命令(或 . 命令)用于在当前 Shell 环境中执行指定脚本文件中的命令。这意味着被包含的脚本中的变量、函数等会在当前脚本中生效。

语法:
source filename

或

. filename
示例:

假设有一个脚本 utils.sh,内容如下:

# utils.sh
greet() {
    echo "Hello, $1!"
}

在另一个脚本 main.sh 中,你可以通过 source 命令包含 utils.sh:

# main.sh
source utils.sh

greet "Alice"

运行 main.sh 时,输出将是:(失误,少打个 s )

2. 使用 sh 或 bash 命令

也可以使用 sh 或 bash 命令来执行另一个脚本文件。与 source 不同的是,这种方式会在子 Shell 中执行脚本,因此被包含脚本中的变量和函数不会影响当前脚本的环境。

语法:
sh filename

或

bash filename
示例:

继续使用上面的 utils.sh 和 main.sh,但这次使用 bash 命令:

# main.sh
bash utils.sh

greet "Alice"

运行 main.sh 时,会报错,因为 greet 函数在子 Shell 中定义,不会在当前 Shell 中生效。

3. 使用 exec 命令

exec 命令可以用于替换当前 Shell 进程为指定的命令或脚本。这意味着当前脚本的执行会停止,转而执行被包含的脚本。

语法:
exec filename
示例:
# main.sh
echo "This will not be executed"
exec bash utils.sh
echo "This will not be executed either"

4. 使用 cat 和 eval

可以使用 cat 命令读取文件内容,然后通过 eval 执行这些内容。

语法:
eval "$(cat filename)"
示例:
# main.sh
eval "$(cat utils.sh)"

greet "Alice"

运行 main.sh 时,输出将是:

总结

在 Shell 脚本中,文件包含可以通过多种方式实现,最常见的是使用 source 或 . 命令。这种方式允许你在当前 Shell 环境中执行另一个脚本,使得变量、函数等可以在当前脚本中使用。

Shell 输入/输出重定向 大多数系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。 阅读详情

相关推荐

Shell 函数、Shell 输入/输出重定向和Shell的文件包含

Shell 函数、Shell 输入/输出重定向和Shell的文件包含

98年热爱开发的前后端开发工程师! 730

shell 文本数据处理

在 linux shell 中,不同工具、程序间通过文本进行数据交互,即以文本作为输入、输出标准格式。文本成为公共的协议,使得整个 shell 成为一个开放式环境,这给文本数据的处理带来了很大的方便。例如通过重定向可以保存一个程序的输出到文件;通过管道(使用符号 | 表示),可以把一个程序(cat)的输出,作为另一个程序(echo)的输入。

游戏AI开发者 5178

【Shell学习笔记】8.Shell 输入/输出重定向及文件包含

本章介绍Shell的输入/输出重定向和文件包含。

qq_62052372的博客 677

Shell 文件的输入输出

详情地址: Shell 文件的输入输出 | 小步教程本节实现从文件输入,输出到文件。准备数据文件data1.txt,其中内容为:xiaobuteach.com例1:从文件中读取内容 <与文件名之间空隔可有可无。然后echo $name查看数据例2:往文件中写内容 >与文件名之间空格可有可无。查看数据正确。例3:将输出与错误写到不同文件 1>log.txt表示将正常内容写到log.txt文件2>err.txt表示将错误内容写到err.txt文件ll命令执行完后,并没有显示到显示器,而是输出到了文

小步教程 3307

有史以来最小的GIF/png/jpg/jpeg

昨天我对图像进行了 base64 编码,这样我就可以将它发送到 CouchDB 以测试我正在为客户编写的一些代码。它让我想起了我之前在远程服务器上设置 cookie 时所做的事情。基本上,一个小的 PHP 脚本被放在远程服务器上,它接受几个 GET 参数并根据它们的值设置一些 cookie。然后脚本输出一个 1x1 的透明 GIF。本地服务器上的 PHP 脚本生成了一个 IMG 标签,该标签链接到该图像并根据本地服务器上的 COOKIES 设置参数。

凌凌1301的博客 1417

H3C防火墙旁路部署实战:网关迁移到防火墙后,如何配置DHCP和VLAN间隔离策略?

本文详细介绍了H3C防火墙旁路部署实战,重点讲解网关迁移到防火墙后的DHCP配置和VLAN间隔离策略。通过实际案例和配置示例,帮助网络工程师解决传统核心交换机架构的性能瓶颈和安全管控问题,实现精细化访问控制。

weixin_42549451的博客 416

Shell - 初探(五)

expect_out(buffer)以及expect_out(0,string)及更多输出用法可以查看使用man expect去查看更多细节。:获取匹配信息匹配成功则执行expect后面的程序动作(检测由壳内进程发出的特定交互指令反馈字符串后向下执行):用于向进程发送字符串(从壳外向壳内进程发送一条字符串,换行符为确认结束)命令从用户接收消息,当用户输入ctrl+D时结束输入,循环同时结束。:交互程序开始后面跟命令或者指定程序(在壳内启动这个进程):在expect中多次匹配就需要用到。...

qq_39810152的博客 840

grafana对接zabbix数据展示

【配置】点击【模板】点击【创建模板】添加三个监控项:【名称】搜索【】创建的模板;点击上方【监控项】,点击创建【监控项】点击上方【触发器】点击【创建触发器】主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】查看:左侧点击【监测】点击【主机】点击【Zabbix server】点击最新数据,找到添加的三个模板主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】把监控模板用起来① 明确获取指标数据的方法。

2401_83883919的博客 6592

将shell命令执行结果输出到指定文件中

两种方法: 2>&1 | tee mylog.log > test.txt 举例: ------------------------------------------------------------ sh batchjob.sh 2>&1 | tee mylog.log ls * > test.txt -------------------...

xikangsoon的博客 4万+

华为面试手撕真题【字符串压缩】

华为面试手撕真题【字符串压缩】

MISAYAONE的博客 1万+

【DeepSeek实战】1、DeepSeek民用级开发全指南:从0到1掌握AI应用开发与模型蒸馏实战

DeepSeek创新性地打破了传统AI开发的技术壁垒,通过双模型架构(DeepSeek-V3和R1)实现普惠化与专业化并重。其核心优势包括:零代码操作、浏览器直接使用、中文提示词控制及低成本(2元/百万token)。用户通过简单三步(注册-配置-使用)即可快速开启AI之旅,平台提供$50免费额度支持2个月高频使用。 四大核心应用场景: 办公自动化:周报撰写、PPT生成、数据分析一键完成 内容创作:提供爆款标题生成、垂直领域写作模板 学习辅助:支持文档解析、错题讲解、知识图谱构建 生活服务:个性化行程规划

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1735

「Linux系列」Shell 输入/输出重定向

在Shell中,重定向允许你将命令的输入或输出从默认的位置(通常是键盘或屏幕)改变到文件或其他设备。Shell 输出重定向允许你将命令的标准输出(stdout)或标准错误输出(stderr)重定向到文件或其他设备,而不是将它们打印到终端。Shell输入重定向是一种强大的工具,它允许你将文件内容或其他命令的输出作为另一个命令的输入,从而简化数据处理流程并提高脚本的灵活性。在Shell中,输入重定向允许你将一个文件或命令的输出作为另一个命令的输入,而不是从标准输入(通常是键盘)读取。你可以使用输入重定向将。

日常笔记/总结/系列知识梳理 3148

YOLO26 vs YOLOv12 vs YOLOv10:工业场景性能实测,速度/精度/部署难度全对比(附完整测试代码)

YOLO26:工业场景全能型选手,无NMS+无DFL设计让部署和推理都省心,小目标精度优势明显,CPU推理速度提升43%,适合大多数生产线场景YOLOv12:中大型目标检测专家,Area Attention在复杂背景下表现出色,适合汽车、家电等大型零部件检测YOLOv10:速度狂魔,GPU上性能领先,轻量化版本适合边缘部署,但小目标精度略逊,适合对实时性要求极高的分拣线场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 623

【Linux Shell】输入/输出 重定向

大多数 UNIX 系统命令从终端接受输入并将所产生的输出发送回​​到原来输入的终端。一个命令通常从标准输入的地方读取输入,默认情况下,这恰好是你的终端,同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。重定向命令列表如下:命令作用默认情况下,将 stdout输出 重定向到 file。默认情况下,将 stdin输入 重定向到 file。将输出以追加的方式重定向到 file。n > file将文件描述符为 n 的文件重定向到 file。n >> file。

普罗米修斯的博客 1621

全面解读 SAP Business Data Cloud

SAP 在 2025 年初正式推出(简称BDC),它把、以及全新的统一封装为一项完全托管的 SaaS 服务,配套交付“语义层 + 数据产品 + 智能应用”三层能力,为企业构建真正贴近业务语境的 “Business Data Fabric”。这一方案不仅解决了跨系统数据碎片化、治理难及 AI 训练数据可信度低的问题,还为现有 BW 客户、S/4HANA以及第三方工作负载提供云上现代化路径和零拷贝数据共享机制。本文将围绕技术架构、核心组件、业务场景、迁移路线及未来展望展开,以 Henkel 等真实案例佐证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 906

AgentScope Java 入门:Spring AI Alibaba 与 AgentScope 的定位与区别

摘要:Spring AI Alibaba是阿里基于Spring AI开发的本地化AI应用框架,旨在服务Java开发者。它提供模型接入、函数调用、RAG等功能,并与阿里云基础设施深度集成。同时,阿里开源了多智能体框架AgentScope,其Java版(AgentScope-Java)专注于Agentic设计理念。两者将协同发展:Spring AI Alibaba侧重Spring生态集成,AgentScope-Java强化智能体能力。未来计划包括支持AgentScope、升级Admin平台,以及推进Server

SmartSi 1532

shell输入输出重定向

大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

运维老生常谈 1416

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Shell—输入/输出重定向

本文主要讲解Shell的输入/输出重定向的相关知识 一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。 重定向命令列表如下: 命令 说明 command > file 将输出重定向到 file。 command 将输

飞龙在天 2526

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Shell输入输出重定向

一、文件描述符 英文是file descriptor简称fd。 文件描述符是一个非负整数。它是一个索引值,指向进程打开的文件。 Linux程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。 每个文件描述符会与一个打开的文件相对应 不同的文件描述符也可能指向同一个文件 在Linux中,每一个进程打开时都会自动获取3个文件描述符0、1和2,分别表示标准输入、标准输出、和标准错误,如果要打开其他文件,则文件描述符必须从3开始标识。 文件描述符 文件名 类型 指向硬件 0 /dev/std

void的博客 4311

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

详解shell中的几种标准输出重定向方式

shell重定向介绍 无论是用什麽语言开发的程序,都会处理外部的输入,然后将运算结果输出到指定的位置。在交互式的程序中,输入来自用户的键盘和鼠标,结果输出到用户的屏幕,甚至到其他播放设备中。而对于某些后台运行的程序,输入可能来自于外部的一些文件,运算的结果通常又需要写到其他的文件中。比如:程序在运行的过程中,会有一些关键性的信息,比如异常堆栈,外部接口调用情况等,这些都会统统写到日志文件里。 sh...

yuki5233的博客 2万+
上一篇: Shell学习(5/6) 流程控制-函数
下一篇: 重学 Android 自定义 View 系列(十一):文字跑马灯剖析
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值