当前位置: 首页 > java >正文

shell命令扩展

文章目录

  • 前言
  • 一、逻辑运算符
    • 1.1 逻辑运算符 &&
    • 1.2 逻辑运算符 ||
    • 1.3 组合注意
  • 二、echo
    • 2.1 标准输出(stdout)
    • 2.2 输出到标准错误(stderr)
  • 三、标准文件描述符(FD)
    • 3.1 描述符说明
    • 3.2 示例演示
        • 3.2.1 stdout/stderr
        • 3.2.2 只把 stdout 重定向到文件,但 stderr 不重定向
  • 四、重定向:>(覆盖)与 >>(追加)
    • 4.1 覆盖重定向(>)
    • 4.2 追加重定向(>>)
    • 4.3 重定向错误输出:2> / 2>>
  • 五、同时重定向 stdout 与 stderr
    • 5.1 POSIX推荐写法
    • 5.2 Bash 特殊简写(bash/ksh/zsh)
  • 六、输出丢弃 /dev/null
    • 6.1 丢弃(stderr)
    • 6.2 同时丢弃两者
  • 七:管道 |(顺便说明,与重定向的区别)
    • 7.1 基本用法
    • 7.2 stderr 通过管道传给下一个命令
  • 八、高级技巧:自定义文件描述符
  • 九、小结
      • 重定向和管道操作符总结
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、逻辑运算符

1.1 逻辑运算符 &&

含义::仅当左侧命令成功(退出状态码为 0)时才执行右侧命令。

示例:

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

在这里插入图片描述

1.2 逻辑运算符 ||

**含义:**仅当左侧命令失败(退出状态码非 0)时才执行右侧命令。

示例:

false || echo "左侧失败,执行此处"
左侧失败,执行此处```true || echo "不会执行"
# 没有输出,因为 true 成功,右侧不执行

在这里插入图片描述

1.3 组合注意

说明:
A && B || C 从左到右结合,等价于 (A && B) || C 。
示例:

$ false && echo yes || echo fallback
fallback
# (false && echo yes) 不成立,于是执行 || 后面的 echo fallback

在这里插入图片描述

二、echo

2.1 标准输出(stdout)

含义:
把文本写到 标准输出(stdout)(文件描述符 1)
示例:

$ echo "hello world"
hello word

在这里插入图片描述

2.2 输出到标准错误(stderr)

含义:
把文本写到 标准错误(stderr,文件描述符 2)
示例:

echo "this is error" >&2
这会把文本发送到 stderr

在这里插入图片描述

三、标准文件描述符(FD)

3.1 描述符说明

  • 0 = stdin(标准输入)
  • 1 = stdout(标准输出)
  • 2 = stderr(标准错误)

3.2 示例演示

3.2.1 stdout/stderr
echo "out"
out # 到 stdout
echo "err" >&2
err # 到 stderr

在这里插入图片描述

3.2.2 只把 stdout 重定向到文件,但 stderr 不重定向
ls /no/such/path >out.txt
# 终端会显示错误信息(stderr),out.txt 为空或不存在

在这里插入图片描述

四、重定向:>(覆盖)与 >>(追加)

4.1 覆盖重定向(>)

含义:
'>'把 stdout 写到文件(覆盖原内容)

echo "first" > file.txt
echo "second" > file.txt
cat file.txt
second

在这里插入图片描述

4.2 追加重定向(>>)

含义:
”>>“把 stdout 追加到文件末尾

echo "first" > file.txt
$ echo "second" >> file.txt
$ cat file.txt
first
second

在这里插入图片描述

4.3 重定向错误输出:2> / 2>>

含义:
将stedrr(文件描述符2)重定向到文件,支持覆盖或追加
示例:

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

5.1 POSIX推荐写法

格式:command >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 内容。
在这里插入图片描述

5.2 Bash 特殊简写(bash/ksh/zsh)

格式:

command &>file # 将 stdout 和 stderr 都写入 file(Bash 特性)
command |& other # 将 stdout+stderr 都送入管道(bash/zsh 的简写)

示例:
在这里插入图片描述

六、输出丢弃 /dev/null

含义:
把不想要的输出重定向到 /dev/null (黑洞)。

示例:

只保留 stderr,丢弃 stdout:
some_command > /dev/null

在这里插入图片描述

6.1 丢弃(stderr)

示例:

some_command 2> /dev/null

丢弃strerr,保留strout
在这里插入图片描述

6.2 同时丢弃两者

some_command > /dev/null 2>&1
# 或(bash):
some_command &> /dev/null

在这里插入图片描述

七:管道 |(顺便说明,与重定向的区别)

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

7.1 基本用法

含义:
把前一个命令的 stdout 作为下一个命令的 stdin。

示例:

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

在这里插入图片描述

7.2 stderr 通过管道传给下一个命令

示例:

command 2>&1 | grep something
# 或(bash):
command |& grep something

把 stdout 和 stderr 都传给后面

bash -c 'echo out; echo err >&2' 2>&1 | sed -n 'p'
out
err

在这里插入图片描述

八、高级技巧:自定义文件描述符

含义:
你可以用 exec 打开一个新的 FD,然后向它写
示例:

exec 3>mylog.txt #将文件描述符 3 重定向到文件mylog.txt
echo "hello" >&3  #将 hello 写入到文件描述符 3 关联的文件:mylog.txt
exec 3>& #释放文件描述符 3 的资源,确保文件被正确关闭
cat mylog.txt
hello

进阶技巧常用于脚本中对多个日志流进行管理
在这里插入图片描述

九、小结

重定向和管道操作符总结

符号/语法描述
&&左命令成功才执行右命令
||左命令失败才执行右命令
>覆盖写入 stdout
>>追加写入 stdout
2>覆盖写入 stderr
2>>追加写入 stderr
2>&1将 stderr 重定向到 stdout
/dev/null丢弃输出
&>同时重定向 stdout 和 stderr(bash)
|管道仅传递 stdout
2>&1 |管道传递 stdout 和 stderr
|&管道传递 stdout 和 stderr(bash)

总结

作者很懒,没写总结

http://www.xdnf.cn/news/19211.html

相关文章:

  • 网络编程之设置端口复用
  • C6.6:交流参量、电压增益、电流增益的学习
  • 迅睿CMS标签工具箱v1.1版本已更新
  • python 转偶数
  • React学习教程,从入门到精通, ReactJS - 特性:初学者的指南(4)
  • Linux829 shell:expect interact “ “ set
  • 解密PCI Express:现代计算机的“高速公路“是如何设计的?
  • W25Q64的写入
  • stm32单片机使用tb6612驱动编码器电机并测速的驱动代码详解—详细参考开发手册(可移植+开发手册)
  • 【系列02】端侧AI:构建与部署高效的本地化AI模型 第1章:为什么是端侧AI?
  • 音乐云测试报告
  • 【笔记】扩散模型(一二)U-ViT|Diffusion with Transformer
  • 大模型应用01——火山方舟大模型服务平台快速入门
  • 端到端推荐大模型OneSug颠覆电商查询推荐!端到端生成式框架降延迟43%,长尾场景突破传统瓶颈
  • 订餐后台管理系统 - day04退出登录与账号管理模块
  • layout版图设计学习笔记3_linux基础指令
  • YOLO v11 目标检测+关键点检测 实战记录
  • 3.1 DataStream API 编程模型
  • 矿用随钻测量现场应用中,最新的MEMS陀螺定向短节的优势是什么?
  • 如何禁止网站内容被复制:技术、策略与深度思考
  • 智慧园区安防技术一站式解决方案-云迈智慧园区管理系统
  • Ansible 常用模块详解文档
  • 龙迅#LT7642GX适用于4路HDMI2.1/DP/TPYE-C转HDMI+LVDS/MIPI混合开关应用,分辨率高达8K30HZ !
  • 2025 年邮件服务器软件推荐:国产化与智能化并重的选型指南
  • 【SOD】目标检测
  • 《WINDOWS 环境下32位汇编语言程序设计》第8章 通用对话框
  • 【dtcc】数据库 随笔
  • Python字符串转日期完全指南:从基础到企业级应用实践
  • 第三方软件测试:【深度解析SQL注入攻击原理和防御原理】
  • 从自定义日期类角度解析运算符重载,友元函数(friend)