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

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.dtcms.com/a/356982.html

相关文章:

  • Qt类-扩充_xiaozuo
  • ArcGIS Pro中 Nodata和nan 黑边的处理
  • 沃尔玛AI系统Wally深度拆解:零售业库存周转提速18%,动态定价争议与员工转型成热议点
  • 【lua】Lua 入门教程:从环境搭建到基础编程
  • Java深拷贝与浅拷贝核心解析
  • C primer plus (第六版)第十一章 编程练习第1,2,3,4题
  • typescript postgres@3.x jsonb数据插入绕过类型检测错误问题
  • Linux驱动学习-spi接口
  • 手写一个Spring框架
  • 【树论】树上启发式合并
  • ansible的playbook练习题
  • 短剧小程序系统开发:助力影视行业数字化转型
  • 算法---字符串
  • Speculation Rules API
  • PDF转图片工具实现
  • 天气查询系统
  • 2025_WSL2_Ubuntu20.04_C++20_concept 环境配置
  • el-select多选下拉框出现了e611
  • MySQL 中ORDER BY排序规则
  • 物联网平台中的Swagger(二)安全认证与生产实践
  • Socket编程核心API与结构解析
  • 【C++】掌握类模板:多参数实战技巧
  • 构筑沉浸式3D世界:渲染、资源与体验的协同之道
  • 云计算学习笔记——逻辑卷管理、进程管理、用户提权RAID篇
  • N32G43x Flash 驱动移植与封装实践
  • DBeaver 的 PostgreSQL 驱动包默认存储位置
  • 序列化和反序列的学习
  • 移动社交时代电商流量获取新路径:基于社群与开源AI智能名片链动2+1模式S2B2C商城小程序的探索
  • 【基础-单选】关于Button组件,下面哪个样式是胶囊型按钮
  • 大模型之RAG, 检索增强生成