Bash - 极其简单的脚本将输出重定向到文件
Bash - extremely simple script redirecting output to file
免责声明:我是 bash 的新手,出于某种原因,我很难学习这个。根据我访问的网站,语法似乎有很大不同。
我有一个简单的包装器脚本,我想测试文件是否经过 gzip 压缩,如果是,则将该文件 zcat 到一个新的临时文件并在编辑器中打开它。这是脚本的一部分:
if file $FILE | grep -q gzip
then
timestamp=$(date +"%D_%T")
$( zcat $FILE > tmp-$timestamp )
fi
我收到一个错误:"tmp-10/19/15_15:16:41: No such file or directory"
我尝试删除命令替换语法或将 tmp-$timestamp 放在双引号中,但我得到了同样的错误。如果我删除 -$timestamp 部分,那么它似乎工作正常。有人能告诉我这是怎么回事吗?我正在清除遗漏的东西非常简单。
tmp-10/19/15_15:16:41
指的是目录 19
中名为 15_15:16:41
的文件,该目录是 tmp-10
的子目录。如果这些目录和子目录不存在,则无法写入。
替换:
timestamp=$(date +"%D_%T")
与:
timestamp=$(date +"%F_%T")
这给出了没有 /
的日期。
作为此格式的示例:
$ date +"%F_%T"
2015-10-19_12:37:05
对于 %F
,年在月之前,月在日之前。这意味着您的文件将正确排序。对于大多数人来说,这是比 %D
.
重要的优势
修改脚本
您的脚本可以简化为:
if file "$file" | grep -q gzip
then
zcat "$file" > "tmp-$(date +"%F_%T")"
fi
备注:
最好不要对 shell 变量使用全部大写。系统对其变量使用全部大写,你不想不小心覆盖一个。使用小写或混合大小写,你会很安全。
文件名,例如 $file
,应始终用双引号引起来。有一天,有人会给你一个包含 space 的文件名,而你不希望它导致你的脚本失败。
命令替换$(...)
不属于此处。它已被删除。
免责声明:我是 bash 的新手,出于某种原因,我很难学习这个。根据我访问的网站,语法似乎有很大不同。
我有一个简单的包装器脚本,我想测试文件是否经过 gzip 压缩,如果是,则将该文件 zcat 到一个新的临时文件并在编辑器中打开它。这是脚本的一部分:
if file $FILE | grep -q gzip
then
timestamp=$(date +"%D_%T")
$( zcat $FILE > tmp-$timestamp )
fi
我收到一个错误:"tmp-10/19/15_15:16:41: No such file or directory"
我尝试删除命令替换语法或将 tmp-$timestamp 放在双引号中,但我得到了同样的错误。如果我删除 -$timestamp 部分,那么它似乎工作正常。有人能告诉我这是怎么回事吗?我正在清除遗漏的东西非常简单。
tmp-10/19/15_15:16:41
指的是目录 19
中名为 15_15:16:41
的文件,该目录是 tmp-10
的子目录。如果这些目录和子目录不存在,则无法写入。
替换:
timestamp=$(date +"%D_%T")
与:
timestamp=$(date +"%F_%T")
这给出了没有 /
的日期。
作为此格式的示例:
$ date +"%F_%T"
2015-10-19_12:37:05
对于 %F
,年在月之前,月在日之前。这意味着您的文件将正确排序。对于大多数人来说,这是比 %D
.
修改脚本
您的脚本可以简化为:
if file "$file" | grep -q gzip
then
zcat "$file" > "tmp-$(date +"%F_%T")"
fi
备注:
最好不要对 shell 变量使用全部大写。系统对其变量使用全部大写,你不想不小心覆盖一个。使用小写或混合大小写,你会很安全。
文件名,例如
$file
,应始终用双引号引起来。有一天,有人会给你一个包含 space 的文件名,而你不希望它导致你的脚本失败。命令替换
$(...)
不属于此处。它已被删除。