将文件内容合并为命令一部分的 bash 脚本

将文件内容合并为命令一部分的 bash 脚本

我正在尝试将我认为可以称为 bash 脚本的内容组合在一起(并不是说我的 bash 脚本编写能力有什么值得吹嘘的)。我想做的是将文本文件(内容定期更改的文本文件)中的一行提供给我正在调用的程序(imagemagick)。到目前为止,它是有效的,但前提是文本文件中只有一个单词或数字序列——我想是因为我正在尝试使用循环for,而循环会以某种方式导致空白被视为换行符。因此,当文件的内容超过一个单词或数字序列时,文件的内容不是作为一行文本馈送到程序,而是看起来一次馈送一行,而且只有最后一行 -几乎只有一个词——最终被合并到结果中。不是我想要的。

我将给出一个使用 echo 的示例,因为我认为这样会更容易演示和理解。我有一个文本文件,假设它名为myfile.txt.它包含一行,其中包含多个单词和数字序列。它可能如下所示:

'Sep 09, 2016 - 01:00 PM EDT\nconditions: mostly cloudy\n34 F\nHumidity: 39%'

单引号应该让我将这些材料提供给的程序将其视为一个整体并忽略空格。 \n 位是我要输入的程序所需要的,它们在该程序中充当换行指示器。因此,将此示例与for循环和 echo 命令一起使用,如下所示的行

for i in `cat myfile.txt`; do echo $i; done

不产生输出

'Sep 09, 2016 - 01:00 PM EDT\nconditions: mostly cloudy\n34 F\nHumidity: 39%'

'Sep
09,
2016
-
01:00
PM
EDT\nconditions:
mostly
cloudy\n34
F\nHumidity:
39%'

从我读到的内容来看,似乎使用调用 cat 的循环并不是完成我所追求的任务的好方法,并且循环很可能是内容最终分布在几行而不是的原因全部一起。那么,任何人都可以建议一种方法来执行此操作,使所有这些单词和整数组最终出现在同一行上吗?

PS:我尝试创建的脚本以一系列命令开始#!/bin/bash并由一系列命令组成。它下载一个文本文件,其中大部分内容被删除并重命名为myfile.txt.之后它会下载天气图并对其执行一些操作(主要是裁剪)。这个想法是使用 imagemagick 将一些文本并置到该地图/图像上。事实上,只要我不尝试包含多个单词或被空格分隔的整数序列,它就已经可以工作了。如果文本文件中超过单个单词或整数序列,则只有最后一个单词或整数序列会并置到图像上。

答案1

我猜您正在尝试使用 Imagemagick 渲染一些文本。如果是这样,为什么不说

convert -background lightblue -fill blue -font Helvetica -size 160x  label:"$(<input.txt)" output.gif

input.txt您要渲染的文件在哪里。

答案2

while read -r things; do
  printf "%s\n" "$things"
done <myfile.txt

如果您发现自己正在写作for i in $( cat ...,请停止并将其更改为 a while read -r i,然后在 处输入数据done。没有理由仅仅为了循环而读取整个文件的内容,并且在某些情况下(大数据)这会给您带来很多麻烦。

标志-rtoread将使处理read反斜杠正确。

我也在使用printf而不是echo.为什么?看这里

我还引用了我的变量。为什么?看这里

相关内容