首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash -非常简单的脚本将输出重定向到文件

Bash -非常简单的脚本将输出重定向到文件
EN

Stack Overflow用户
提问于 2015-10-19 19:30:15
回答 1查看 63关注 0票数 1

免责声明:我是个新手,由于某些原因,我很难学会这个。根据我访问的网站的不同,语法似乎很不一样。

我有一个简单的包装脚本,我想测试一个文件是否是gzipped的,如果是的话,我要将该文件zcat到一个新的临时文件中,并在编辑器中打开它。下面是脚本的一部分:

代码语言:javascript
复制
if file $FILE | grep -q gzip
then
    timestamp=$(date +"%D_%T")
    $( zcat $FILE > tmp-$timestamp )
fi

我收到一个错误:"tmp-10/19/15_15:16:41:没有这样的文件或目录“

我尝试删除命令替换语法,或者将tmp-$时间戳放在双引号中,然后得到相同的错误。如果我删除了-$timestamp部分,那么它似乎工作得很好。有人能告诉我这是怎么回事吗?我正在清理掉一些很简单的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 19:35:26

tmp-10/19/15_15:16:41是指目录19中的一个名为15_15:16:41的文件,它是tmp-10的一个子目录。如果这些目录和子目录不存在,则不能写入它们。

取代:

代码语言:javascript
复制
timestamp=$(date +"%D_%T")

通过以下方式:

代码语言:javascript
复制
timestamp=$(date +"%F_%T")

这给出了没有/的日期。

作为这种格式的一个例子:

代码语言:javascript
复制
$ date +"%F_%T"
2015-10-19_12:37:05

对于%F,一年比月份早,比一天早。这意味着您的文件将正确排序。对大多数人来说,这是相对于%D的一个重要优势。

修订脚本

您的脚本可以简化为:

代码语言:javascript
复制
if file "$file" | grep -q gzip
then
    zcat "$file" > "tmp-$(date +"%F_%T")"
fi

备注:

  1. 最好的做法是不要为shell变量使用所有的上限。系统对其变量使用所有的上限,您不想意外地覆盖一个。使用小写或混合大小写,您将是安全的。
  2. 文件名(如$file )应该始终以双引号表示.总有一天,有人会给你一个有空格的文件名,而你不希望这样做会导致你的脚本失败。
  3. 命令替换$(...)不属于这里。它已经被移除了。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33222364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档