命令行操作:逻辑运算符、重定向与管道

命令行操作:逻辑运算符、重定向与管道

  • 前言
  • 一、逻辑运算符
        • 1.1. 逻辑运算符 && (AND)
        • 1.2. 逻辑运算符 || (OR)
        • 1.3. 标准文件描述符 (FD)
  • 二、重定向
        • 2.1 重定向: > 与 >>
        • 2.2 重定向错误输出: 2>/ 与 2>>
        • 2.3 POSIX 推荐(经常使用)
  • 三、管道 (顺便说明, 与重定向的区别)
  • 结语

前言

  在日常的命令行操作中,我们经常会用到各种逻辑运算符、重定向和管道等高级功能。这些功能不仅能够提高我们的工作效率,还能帮助我们更好地控制命令的执行流程和输出结果。本文将详细讲解逻辑运算符(如 && 和 ||)、标准文件描述符(如 stdin、stdout 和 stderr)、重定向操作(如 >、>>、2> 和 2>>)以及管道的使用方法,并通过丰富的示例帮助读者深入理解这些概念。

一、逻辑运算符

1.1. 逻辑运算符 && (AND)

  逻辑运算符 && 表示“仅当左侧命令成功(退出状态码为 0)时才执行右侧命令”。
示例:

false && echo "成功"
#没有输出,因为 false 失败(退出码非 0),所以右侧不执行
true && echo "成功"
成功
#true 成功(退出码 0),所以执行 echo

在这里插入图片描述

1.2. 逻辑运算符 || (OR)

  逻辑运算符 || 表示“仅当左侧命令失败(退出状态码非 0)时才执行右侧命令”。
示例:

false || echo "左侧失败,执行此处"
#左侧失败,执行此处
true || echo "不会执行"
#没有输出,因为 true 成功,右侧不执行
#组合注意: A && B || C 从左到右结合,等价于 (A && B) || C。
举例:
false && echo yes || echo fallback
fallback
#(false && echo yes) 不成立,于是执行 || 后面的 echo fallback

在这里插入图片描述
在这里插入图片描述

1.3. 标准文件描述符 (FD)
  • 0 = stdin (标准输入)
  • 1 = stdout (标准输出)
  • 2 = stderr (标准错误)

示例(分别演示 stdout/stderr):

echo "out"
out  # 到 stdout
echo "err" >&2
err  # 到 stderr
#如果只把 stdout 重定向到文件,但 stderr 不重定向,错误仍会显示在终端:
ls /no/such/path > out.txt
#终端会显示错误信息(stderr),out.txt 为空或不存在

在这里插入图片描述

二、重定向

2.1 重定向: > 与 >>

含义:

  • > 把 stdout 写到文件(覆盖原内容)
  • >> 把 stdout 追加到文件末尾
    示例(覆盖):
echo "first" > file.txt
echo "second" > file.txt
cat file.txt
second

在这里插入图片描述

示例(追加):
echo "first" > file.txt
echo "second" >> file.txt
cat file.txt
first
second

在这里插入图片描述

2.2 重定向错误输出: 2>/ 与 2>>

含义: 把标准错误 (fd2) 重定向到文件(覆盖或追加)。
示例:

ls /no/such/path 2> err.txt
cat err.txt
ls: cannot access '/no/such/path': No such file or directory

在这里插入图片描述

追加:
ls /no/such/path 2>> err.txt
新的错误会追加到 err.txt 后面

在这里插入图片描述
同时重定向 stdout 与 stderr
有几种常用写法(要注意兼容性与顺序):

2.3 POSIX 推荐(经常使用)

[命令] > out.txt 2>&1
含义: 先把 stdout 重定向到 out.txt,再把 stderr (2) 重定向到当前 stdout (1) 指向的位置(也就是 out.txt)。结果:stdout 和 stderr 都写入 out.txt。
示例:

bash -c 'echo out; echo err >&2' > both.txt 2>&1
cat both.txt
out
err

顺序很重要,下面是常见坑:
bash -c 'echo out; echo err >&2' 2>&1 > both.txt
  这条会把 stderr 重定向到最初的 stdout (终端),然后再把 stdout 重定向到文件,结果是:错误仍打印到终端,而文件里只有 stdout 内容。

Bash 特殊简写 (bash/ksh/zsh)
[命令] &> file # 将 stdout 和 stderr 都写入 file (Bash 特性)
[命令] |& other # 将 stdout + stderr 都送入管道 (bash/zsh 的简写)
示例 (&>):

bash -c 'echo out; echo err >&2' &> both.txt
cat both.txt
out err

将输出丢弃 /dev/null
含义: 把不想要的输出重定向到 /dev/null (黑洞)。
示例: 只保留 stderr,丢弃 stdout:
[命令] > /dev/null
丢弃 stderr:
[命令]> /dev/null
同时丢弃两者:
[命令] > /dev/null 2>&1
或 (bash):
[命令] &> /dev/null

三、管道 (顺便说明, 与重定向的区别)

  含义: 把前一个命令的 stdout 作为下一个命令的 stdin。默认只传输 stdout,不包含 stderr(除非你把 stderr 重定向到 stdout)。
示例:

echo -e "apple\nbanana" | grep banana
banana

如果想把 stderr 也通过管道传给下一个命令,可以用:
[命令] 2>&1 | grep something
或 (bash):
[命令] |& grep something
例子: 把 stdout 和 stderr 都传给 grep:
·```bash
bash -c ‘echo out; echo err >&2’ 2>&1 | sed -n ‘p’
out
err

高级: 自定义文件描述符 (常见技巧)
你可以用 exec 打开一个新的 FD,然后向它写:
示例:
```bash
exec 3 > mylog.txt
echo "hello" >&3
exec 3>&-
cat mylog.txt
hello

(这是可选进阶技巧,用于脚本中对多个日志流进行管理)
小结 (快速备忘)

  • &&: 左成功 → 才执行右
  • ||: 左失败 → 才执行右
  • > 覆盖 stdout, >> 追加 stdout
  • 2> 和 2>> 用于 stderr
  • 将 stderr 指向 stdout: 2>&1 (顺序重要)
  • 同时重定向 stdout + stderr: >file 2>&1 (POSIX),或 &>file (bash)
  • 丢弃输出: >/dev/null / 2>/dev/null
  • 管道 | 只传 stdout; 要传两者用 2>&1| 或 |& (bash)

结语

  通过本文的详细讲解,相信你已经对命令行操作中的逻辑运算符、标准文件描述符、重定向和管道有了更深入的理解。这些工具和技巧将帮助你在日常的命令行操作中更加高效和灵活地处理各种任务。希望你能将这些知识应用到实际工作中,不断提升自己的命令行操作能力。Happy coding!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920470.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDA Pro 逆向安卓 SO 库实战指南:从静态分析到动态调试

IDA Pro 逆向安卓 SO 库是一个系统性的工程。下面我将为你提供一个从环境准备、基础静态分析到高级动态调试的完整实战指南。一、 准备工作与环境搭建 所需工具IDA Pro: 主力逆向工具,建议使用 7.7 或更高版本,对 ARM/ARM64 架构支持更好。目标 APK:…

Python爬虫(47)Python异步爬虫与K8S弹性伸缩:构建百万级并发数据采集引擎

目录一、背景与行业痛点二、核心技术架构解析2.1 异步爬虫引擎设计2.2 K8S弹性伸缩架构三、生产环境实践数据3.1 性能基准测试3.2 成本优化效果四、高级优化技巧4.1 协程级熔断降级4.2 预测式扩容五、总结🌈Python爬虫相关文章(推荐)一、背景…

处理器的双发射是什么?

处理器的双发射是什么? 这是一个处理器微架构层面的概念,对于理解现代高性能CPU(包括一些Cortex-M7/M55/M85等高端MCU内核)如何提升性能至关重要。 核心摘要 双发射 是一种处理器设计技术,允许CPU的译码器在一个时钟周期内,同时解码并派发两条指令到不同的执行单元中去…

麒麟操作系统挂载NAS服务器

前言:因信创整改,需将原服务器的服务全部迁移到信创服务器,在部署完应用后,发现外挂了NAS服务(可用df -h查看挂载文件),于是在信创服务器上需要挂载NAS服务器。在Linux上挂载NAS服务器可以通过多…

qt配置ros2环境,简单版本

因为不同的系统环境会有差异,先把我的环境介绍如下: 系统:Ubuntu22.04 ROS版本:ros2 humble Qt版本:qt-5.14.2 要配置Qt中的ros环境,需要在Qt的系统环境中添加2个变量,一个是编译环境变量、一个…

【基于C# + HALCON的工业视觉系统开发实战】三十六、PCB焊点缺陷检测:0漏检的局部变形匹配技术

摘要:针对PCB焊点检测中虚焊、锡珠、偏移三大核心缺陷,本文提出基于局部变形匹配与黄金模板的工业级解决方案。系统采用"同轴光源+四向可调支架"的硬件布局消除器件阴影,结合HALCON 24.11的局部变形匹配算法适应PCB热膨胀形变。通过多尺度模板库自学习机制实现8秒…

诺基亚无人机网络(NDN-Nokia Drone Networks):面向工业运营的全自动无人机解决方案

诺基亚无人机网络(NDN-Nokia Drone Networks):面向工业运营的全自动无人机解决方案诺基亚无人机网络 (NDN) 是一款先进的全自动无人机一体化解决方案,旨在提升和数字化各种工业和公共安全用例。这款多功能 BVLOS 解决方案基于先进的蜂窝连接,…

OpenTelemetry 在 Spring Boot 项目中的3种集成方式

目录 1. 自动埋点(Java Agent) 2. 注解驱动(WithSpan) 3. 手动埋点(SDK 编程) 配置关键点 方案选择建议 OpenTelemetry 在 Spring Boot 项目中的应用主要有以下三种方式,按实现复杂度由低到…

nvue文件text标签 不同样式的文本在同一段落显示

参考链接&#xff1a;nvue中处理text为块级元素的替代解决方法_nvue 块级元素-CSDN博客 实现效果&#xff1a; nvue的text是块级元素&#xff0c;用上层加粗的绝对定位覆盖底层的文本实现 <view class"cus-text-area"><!-- nvue的text是块级元素&#xff0…

STM32的ADC寄存器操作

ADC硬件电路ADC的硬件电路主要由输入电路&#xff0c;触发信号电路&#xff0c;数据寄存器电路&#xff0c;中断电路还有数据总线这及部分构成。输入信号通道ADC的通道输入到转换器&#xff0c;每个ADC有多达18个通道&#xff0c;可测量16个外部和2个内部信号源&#xff0c;温度…

Java 实现HTML转Word:从HTML文件与字符串到可编辑Word文档

在实际开发中&#xff0c;将HTML页面或内容转换为Word文档是一项常见需求。无论是将网页报表导出为正式文档&#xff0c;还是将合同、发票等页面内容生成可编辑的Word文件&#xff0c;这种转换都能显著提升文档的复用性和归档价值。然而&#xff0c;HTML与Word在结构和渲染机制…

华为L420国产笔记本(统信UOS桌面专业版1070)安装openEuler2403虚拟机

本文探讨在华为L420国产笔记本&#xff08;操作系统为统信UOS桌面专业版1070&#xff09;中安装openEuler2403的arm版虚拟机。 一、测试环境 1、硬件设备 华为L420国产笔记本&#xff0c;CPU为华为麒麟9006C&#xff0c;内存16G 2、操作系统 统信UOS桌面专业版1070 二、安…

【STM32】将 FreeRTOS移植到STM32F103RCT6 详细流程

这篇文章是将 FreeRTOS移植到STM32F103RCT6 详细流程。创建用于移植的根文件夹&#xff0c;如 FreeRTOS-F103。也可以命名为别的名称。进入 FreeRTOS-F103 文件夹&#xff0c;在其内创建以下几个子文件夹&#xff1a;apps&#xff0c;doc&#xff0c;drivers&#xff0c;FreeRT…

京东招java开发

java开发&#xff08;岗位信息经过jobleap.cn授权&#xff0c;可在CSDN发布&#xff09;京东 四川职位描述1、负责企业金融资金、支付基础支撑相关系统建设&#xff1b; 2、负责重点项目、日常需求的承接&#xff0c;按期保质保量交付&#xff1b; 3、负责系统的日常维护及技术…

文本处理与模型对比:BERT, Prompt, Regex, TF-IDF

1. BERT (Bidirectional Encoder Representations from Transformers) BERT是一种基于Transformer架构的深度双向预训练语言模型。它通过在海量文本上进行预训练&#xff08;如掩码语言模型任务&#xff09;&#xff0c;学习到丰富的语言表征&#xff0c;并可以通过微调&#x…

流量迷局 - 理解负载均衡(L4/L7)与CDN背后的“隐形路由

《网络迷踪:SRE的TCP/IP故障排查艺术》 系列第七篇:流量迷局 - 理解负载均衡(L4/L7)与CDN背后的“隐形路由” “案发现场”: 你在排查一个问题时,让用户提供他ping你服务域名的结果。 在北京的用户,ping app.mycompany.com,显示的IP地址是 111.222.1.100。 在广州的用户…

dagger.js 实现「CSS 机械键盘」示例解读(对比 React 版本)

0) 效果演示 &#xff08;代码地址&#xff09; CSS Mechanical Keyboard1) 示例与来源 dagger.js 版本&#xff1a;本笔围绕 CodePen 上的《CSS Mechanical Keyboard》的 dagger.js 改写版进行解读&#xff0c;核心思路是用 dagger 指令把纯 CSS 艺术包装成可复用的组件&…

如何检查 Linux 系统的内存使用情况

内存管理是保持 Linux 系统平稳运行的重要组成部分。无论您是系统管理员、开发者&#xff0c;学会检查 Linux 内存使用情况是确保系统稳定性和性能的关键步骤。本文将介绍在 Linux 环境下监控和检查内存使用的几种方法&#xff0c;包括命令行工具&#xff08;如 top、vmstat、p…

我店生活平台是不是 “圈钱平台”?揭开消费补贴新模式的面纱

近年来&#xff0c;本地生活服务领域涌现出诸多创新模式&#xff0c;其中“WO店”生活平台凭借其独特的全民补贴机制引发行业关注。在“圈钱平台”质疑声此起彼伏的背景下&#xff0c;这一模式究竟是商业创新还是资本游戏&#xff1f;本文将从商业模式、风险控制、用户权益保障…

(LeetCode 每日一题) 1493. 删掉一个元素以后全为 1 的最长子数组 (双指针)

题目&#xff1a;1493. 删掉一个元素以后全为 1 的最长子数组 思路&#xff1a;双指针&#xff0c;时间复杂度0(n)。 C版本&#xff1a; class Solution { public:int longestSubarray(vector<int>& nums) {int ans0;int left0,cnt0;for(int i0;i<nums.size();i…