나는 bash 스크립트라고 부를 수 있는 것을 구성하려고 노력하고 있습니다(내 bash 스크립트 능력이 자랑할 만한 것은 아닙니다). 내가 원하는 것은 텍스트 파일(내용이 주기적으로 변경되는 텍스트 파일)의 한 줄을 내가 호출하는 프로그램(imagemagick)에 공급하는 것입니다. 지금까지는 작동하지만 텍스트 파일에 단 하나의 단어나 일련의 숫자만 있는 경우에만 가능합니다. 루프를 사용하려고 하는데 for
루프로 인해 공백이 개행 문자로 처리되기 때문이라고 생각합니다. 따라서 프로그램에 텍스트 한 줄로 제공되는 대신 파일 내용이 일련의 단어나 숫자를 초과하면 한 번에 한 줄씩 제공되는 것처럼 보이며 거의 단어에 불과한 마지막 줄만 제공되는 것처럼 보입니다. 결국 결과에 병합됩니다. 내가 원하는 것이 아닙니다.
설명하고 이해하는 것이 더 쉬울 것이라고 생각하기 때문에 echo를 사용하여 예를 들겠습니다. 이라는 텍스트 파일이 있습니다 myfile.txt
. 이 파일에는 여러 단어와 숫자 시퀀스가 포함된 줄이 포함되어 있습니다. 다음과 같이 보일 수 있습니다:
'Sep 09, 2016 - 01:00 PM EDT\nconditions: mostly cloudy\n34 F\nHumidity: 39%'
작은 따옴표는 내가 이 자료를 제공하는 프로그램이 그것을 전체적으로 처리하고 공백을 무시하도록 해야 합니다. \n 비트는 내가 입력하는 프로그램에 필요하며 줄 바꿈 표시기 역할을 합니다. 따라서 for
루프 및 에코 명령과 함께 이 예제를 아래와 같이 사용하세요.
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을 호출하는 루프를 사용하는 것은 내가 원하는 것을 달성하는 좋은 방법이 아닌 것 같습니다. 그리고 루프는 내용이 모두 함께가 아닌 여러 줄에 걸쳐 퍼지게 되는 이유일 가능성이 높습니다. . 그렇다면 이 모든 단어와 정수 그룹이 같은 줄에 위치하도록 이를 수행하는 방법을 제안할 수 있는 사람이 있습니까?
추신: 제가 만들려는 스크립트는 #!/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
. 단지 루프를 위해 전체 파일의 내용을 읽을 이유가 없으며 경우에 따라(빅 데이터) 이로 인해 많은 문제가 발생할 수 있습니다.
백슬래시가 올바르게 처리되도록 -r
플래그 를 지정합니다 .read
read
나도 printf
대신 사용하고 있습니다 echo
. 왜죠?이봐.
나는 또한 내 변수를 인용했습니다. 왜?이봐.