加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 找不到命令时的安全shell重定向

发布时间:2020-12-15 22:19:39 所属栏目:安全 来源:网络整理
导读:假设我运行命令(在Ubuntu 14.04中,bash版本4.3.11),当前目录中有一个名为text(无关紧要)的文本文件: nocommand text # make sure noommand doesn't exists in your system 它报告“未找到命令”错误并删除文本文件!我只是想知道如果命令不存在我是否可以避
假设我运行命令(在Ubuntu 14.04中,bash版本4.3.11),当前目录中有一个名为text(无关紧要)的文本文件:

nocommand > text # make sure noommand doesn't exists in your system

它报告“未找到命令”错误并删除文本文件!我只是想知道如果命令不存在我是否可以避免文件的破坏.
我尝试这个命令设置-o noclobber但是如果我运行会发生同样的问题:

nocommand >| text # make sure noommand doesn't exists in your system

似乎bash在查找要运行的特定命令之前重定向输出.任何人都可以给我一些建议如何避免这种情况?

解决方法

实际上,shell首先查看重定向并创建文件.之后它会评估命令.

因此,究竟发生了什么:因为它是一个>重定向,它首先用空文件替换文件,然后计算一个不存在的命令,这会在stderr上产生错误消息而在stdout上没有任何内容.然后它将stdout存储在这个文件中(这没什么,所以文件保持为空).

我同意Nitesh你只需要检查命令是否存在,但是根据this thread,你应该避免使用哪个.我认为一个好的起点是在脚本的开头检查你可以运行所有必需的函数(参见线程,3个解决方案),否则中止脚本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读