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

查询网站域名泉州手机网站建设价格

查询网站域名,泉州手机网站建设价格,视频网站做视频节目赚钱吗,北京网页设计软件培训学校命令行扩展与重定向:驯服终端的魔法 在命令行的世界里,命令扩展就像是隐藏在幕后的魔法师,极大地提升了我们与系统交互的效率和灵活性。今天,就让我们一起深入探索命令扩展的奇妙世界,尤其是那些常用且强大的特性。 逻…

命令行扩展与重定向:驯服终端的魔法

在命令行的世界里,命令扩展就像是隐藏在幕后的魔法师,极大地提升了我们与系统交互的效率和灵活性。今天,就让我们一起深入探索命令扩展的奇妙世界,尤其是那些常用且强大的特性。

逻辑运算符:构建命令逻辑流的基石

&&(AND)运算符

&&运算符就像是一个严格的门卫,只有当左侧命令成功执行(即退出状态码为0)时,才会放行右侧的命令。这在一系列具有依赖关系的操作中尤为有用。例如,在安装软件时,我们通常需要先配置编译选项,再进行编译和安装:

./configure --prefix=/usr/local/someapp && make && make install

在这里,只有./configure成功完成配置,make才会开始编译代码,而只有make编译成功,make install才会将软件安装到指定目录。这样的逻辑确保了整个安装过程的连贯性和正确性。

||(OR)运算符

||运算符则扮演着一个“替补”的角色。当左侧命令执行失败(退出状态码非0)时,它会立即执行右侧的命令。比如,当我们尝试创建一个可能已经存在的目录时:

mkdir /some/directory || echo "目录创建失败,可能已存在"

如果mkdir命令因为目录已存在或权限不足等原因失败,echo命令就会输出提示信息,让我们及时了解情况。

组合使用注意事项

逻辑运算符可以组合使用,例如A && B || C。这里要注意,它们是从左到右结合的,所以这个表达式等价于(A && B) || C。例如:

false && echo yes || echo fallback

在这个例子中,false命令失败,所以&&右侧的echo yes不会执行。接着,由于(false && echo yes)整体失败,||右侧的echo fallback被执行,最终输出fallback

echo:信息输出的便捷通道

echo命令是我们向标准输出(stdout,文件描述符1)发送文本的得力助手。它的用法非常简单:

echo "hello world"

这会在终端上直接打印出hello world

如果我们想把文本输出到标准错误(stderr,文件描述符2),可以使用重定向技巧:

echo "this is error" >&2

这样,这条错误信息就会被发送到stderr,通常在终端上会以不同于正常输出的颜色或格式显示,以便区分。

标准文件描述符:理解输入输出的关键

在命令行中,每个进程都有几个标准文件描述符:

  • 0代表标准输入(stdin),默认情况下,数据从这里流入进程,通常与键盘关联。
  • 1代表标准输出(stdout),进程的正常输出会发送到这里,默认显示在终端上。
  • 2代表标准错误(stderr),进程运行过程中产生的错误信息会输出到这里,同样默认显示在终端上。

我们可以通过重定向操作,改变这些输入输出的流向。例如,将命令的输出重定向到文件:

ls -l > file_list.txt

这个命令会把ls -l的输出结果(stdout)写入到file_list.txt文件中,而不是显示在终端上。

重定向:掌控输出的方向

>(覆盖)与 >>(追加)

  • >操作符用于将stdout覆盖写入到文件中。如果目标文件不存在,它会被创建;如果文件已存在,文件内容将被完全替换。例如:
echo "first" > file.txt
echo "second" > file.txt
cat file.txt

此时file.txt的内容只有second,因为第二次的echo操作覆盖了第一次的内容。

  • >>操作符则是将stdout追加到文件末尾。如果文件不存在,同样会创建新文件。例如:
echo "first" > file.txt
echo "second" >> file.txt
cat file.txt

这里file.txt的内容会是firstsecondsecond被追加到了first的后面。

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

对于标准错误输出(stderr),我们可以使用2>2>>进行重定向。

  • 2>用于覆盖式地将stderr重定向到文件。例如:
ls /no/such/path 2>err.txt

如果ls命令因为找不到指定路径而产生错误,这些错误信息会被写入err.txt文件中。

  • 2>>则用于将新的错误信息追加到文件末尾。例如:
ls /no/such/path 2>>err.txt

多次执行这个命令,新的错误信息会不断追加到err.txt文件的后面。

同时重定向stdout与stderr

  • POSIX推荐方式command >out.txt 2>&1,这种方式先将stdout重定向到out.txt,然后将stderr(文件描述符2)重定向到当前stdout(文件描述符1)指向的位置,也就是out.txt。例如:
bash -c 'echo out; echo err >&2' >both.txt 2>&1
cat both.txt

both.txt文件中会同时包含outerr,因为stdoutstderr都被写入了该文件。

需要注意顺序,如果写成bash -c 'echo out; echo err >&2' 2>&1 >both.txt,会先将stderr重定向到最初的stdout(终端),然后再将stdout重定向到文件,结果就是错误仍打印到终端,而文件里只有stdout内容。

  • Bash特殊简写(bash/ksh/zsh)command &>file,这是Bash等 shell 提供的更简洁写法,同样能将stdoutstderr都写入file。例如:
bash -c 'echo out; echo err >&2' &> both.txt
cat both.txt

结果与上面POSIX方式相同,both.txt中包含outerr

此外,在bash/zsh中还有command |& other的写法,它能将stdout + stderr都送入管道,这在一些复杂的命令组合中非常有用。

将输出丢弃到/dev/null

/dev/null就像是一个黑洞,任何数据被重定向到这里都会消失得无影无踪。我们可以利用这一点来丢弃不想要的输出。

  • 只保留stderr,丢弃stdout
some_command > /dev/null
  • 丢弃stderr
some_command 2> /dev/null
  • 同时丢弃两者(bash中也可以用&>):
some_command > /dev/null 2>&1

或者

some_command &> /dev/null

这样可以让我们的终端界面更加整洁,避免无关信息的干扰。

管道 |:命令协作的桥梁

|操作符用于将前一个命令的stdout作为下一个命令的stdin,从而实现多个命令的协同工作。默认情况下,它只传输stdout,不包含stderr。例如:

echo -e "apple\nbanana" | grep banana

echo -e "apple\nbanana"输出两行文本,通过管道|将这一输出作为grep banana的输入,grep命令在输入中查找包含banana的行,最终输出banana

如果想把stderr也通过管道传给下一个命令,可以使用command 2>&1 | grep something(适用于大多数 shell)或者command |& grep something(bash/zsh的简写)。例如:

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

这里bash -c 'echo out; echo err >&2'产生的stdoutstderr都通过管道被sed -n 'p'处理,sed命令将打印出所有输入行,所以终端会输出outerr

高级:自定义文件描述符

在一些复杂的脚本场景中,我们可能需要对多个日志流等进行管理,这时可以使用exec命令打开自定义文件描述符。例如:

exec 3>mylog.txt
echo "hello" >&3
exec 3>&-
cat mylog.txt

这里首先使用exec 3>mylog.txt打开文件描述符3并将其关联到mylog.txt文件。然后echo "hello" >&3hello写入到文件描述符3指向的文件中。最后exec 3>&-关闭文件描述符3。通过cat mylog.txt可以看到文件中已经写入了hello。这一技巧虽然不太常用,但在特定的脚本编程中能发挥重要作用。

小结

在命令行操作中,这些命令扩展和重定向特性是非常强大的工具。它们让我们能够更加精细地控制命令的执行流程、输入输出的流向,从而提高工作效率,完成各种复杂的任务。无论是日常的系统管理,还是编写脚本自动化任务,熟练掌握这些技巧都将使我们在命令行的世界里如鱼得水。希望通过本文的介绍,你能对命令扩展有更深入的理解和掌握,尽情享受命令行带来的高效与便捷。

http://www.dtcms.com/a/574823.html

相关文章:

  • Spring解决循环依赖其实就用了个递归
  • 成品网站管系统东莞想做网站
  • 重庆可做网站 APP租用服务器做视频网站
  • 全自动削皮机方案,果蔬去皮机/削皮机MCU控制方案开发设计
  • 北京价格微网站建设茶叶价格网站建设
  • Rust 练习册 2:深入理解 Cell
  • 龙华做网站西安微网站开发
  • 国外有网站备案制度吗制作视频网站建设
  • 创建本地网站站酷设计官方网站
  • LeetCode 416 - 分割等和子集
  • 网站开发命名规范iis创建网站
  • 物流公司网站 源码开发区邮编
  • 做网站需要给设计提供网络营销策划是什么
  • 香港科技大学广州|智能交通学域博士招生宣讲会—湖南大学专场
  • 哪家网站开发好wordpress 禁止头像
  • 淘宝网站开发网站开发恶意索赔
  • Python+Requests零基础系统掌握接口自动化测试
  • 建设网站的硬件影视公司简介
  • 北京网站建设seo公司哪家好免费做字体的网站好
  • 淘宝客网站搭建教程能推广的平台有哪些
  • 坪地网站建设如何wordpress博客下载插件
  • 做外贸要访问国外的网站怎么办携程网网站是哪家公司做的
  • dz网站模板新河网新河吧
  • Ubuntu22.04 ros2-humble 源码安装 Moveit2
  • 网站开发需求表模板制作小企业网站
  • 南宁公司做网站佛山企业网站建设渠道
  • 从山海经取公司名三个字无锡优化网站排名
  • 旅游网站系统设计wordpress多重搜索
  • php快速建站系统广西建设网登录入口
  • 高端网站开发案例展示做网站傻瓜