모트의 이상한 행동

모트의 이상한 행동

나는 다른 제목의 목록에서 여러 이메일을 보내는 작은 스크립트를 작성했습니다.

 #!/bin/bash

 while read -a line
 do
 mailadd=${line[0]}
 subject=${line[1]} 

 mutt -s `echo $subject` `echo $mailadd` < /home/emanuele/testomail.txt

 done < prova.txt

스크립트는 잘 작동하고 메일을 보내지만 mutt는 옵션이 필요하다고 말합니다 -s.

mutt: option requires an argument -- 's'
Mutt 1.5.21 (2010-09-15)

스크립트가 제대로 작동하는 이유를 이해할 수 없지만 mutt가 오류와 함께 종료됩니다. 어떻게 해결할 수 있나요?

답변1

첫째, `echo $subject`작성하는 방법이 복잡합니다 $subject(공백이 포함되어 있거나 값이 약간 손상되는 경우 제외). \[*?외부 $subject따옴표는 공백으로 구분된 와일드카드 패턴 목록으로 처리되며 전체 명령 대체의 결과는 다시 다음과 같습니다. 공백으로 구분된 와일드카드 패턴 목록으로 시작하는 것으로 처리됩니다.

명령이 이 오류를 일으킬 수 있는 유일한 방법은 if `echo $subject` `echo $mailadd`가 비어 있는 경우입니다. 이는 `echo $subject`및 둘 다 공백만 포함하고 변수 및 둘 다 비어 있는 경우 에만 발생합니다( 문자 및 단일 공백이 있는 이름을 포함하는 현재 파일과 같은 이상한 경우도 있습니다 ). 따라서 입력 파일에 빈 줄이 있을 가능성이 매우 높습니다.`echo $mailadd`subjectmailaddsubject?

"$somevar""$(somecommand)"변수 값을 공백으로 구분된 파일 와일드카드 패턴 목록으로 해석하려는 경우가 아니면 변수 대체 및 명령 대체( , ) 주위에 항상 큰따옴표를 넣어야 합니다 .

mutt -s "$subject" "$mailaddr" <~/testeomail.txt

입력 파일에 빈 줄이 있으면 건너뜁니다.

while read -a line; do
  mailadd=${line[0]}
  subject=${line[1]}
  if [ -z "$subject" ]; then continue; fi
  mutt -s "$subject" "$mailadd" < /home/emanuele/testomail.txt
done < prova.txt

관련 정보