Bash

將文件中的內容合併為命令的一部分的 bash 腳本

  • August 10, 2016

我正在嘗試將我猜想可以稱為 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 將一些文本並列到該地圖/圖像上。事實上,它已經在工作了,只要我不嘗試包含除以空格的多個單詞或整數序列。如果我在文本文件中超出了單個單詞或整數序列,則只有最後一個單詞或整數序列會並列到圖像上。

我猜您正在嘗試使用 Imagemagick 渲染一些文本。如果是這樣,為什麼不說

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

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

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

如果您發現自己在寫作,請for i in $( cat ...停止並將其更改為 a while read -r i,然後在done. 沒有理由僅僅為了循環遍歷整個文件的內容,並且在某些情況下(大數據)會給您帶來很多麻煩。

-r標誌 to將read正確read處理反斜杠。

我也在使用printf而不是echo. 為什麼?見這裡

我還引用了我的變數。為什麼?見這裡

引用自:https://unix.stackexchange.com/questions/302457