여러 파일을 단일 파일에 추가한 다음 메일로 보내는 방법은 무엇입니까?

여러 파일을 단일 파일에 추가한 다음 메일로 보내는 방법은 무엇입니까?
if [[ unix = unix ]]
then
echo "they are same" > a.txt
else 
echo "they are not same" > b.txt
a.txt>>b.txt>c.txt
mail -s "comparison" [email protected] < /home/c.txt

메시지 본문에 동일한지 다른지 표시하고 싶지만 예상한 결과가 나오지 않습니다.

파일 중 하나가 a.txt또는b.txt 로 보고됩니다 command not found.

답변1

스크립트의 의도가 무엇인지는 확실하지 않지만 "여러 파일을 단일 파일에 추가하는 방법"이라는 제목에서 주요 질문에 대답하겠습니다...

리디렉션 연산자( >, 등) >><파일에만 작동할 수 없습니다. 명령의 입력과 출력을 처리합니다. " 내용으로 덮다 " foo > bar라는 의미는 아닙니다 . 이는 "명령을 실행 하고 해당 출력으로 덮어쓰기 "를 의미합니다. 이는 "명령을 실행 하고 해당 출력을 현재 콘텐츠에 추가 "를 의미합니다. 또한, 이것들은 연결할 수 없습니다. 무의미한.barfoofoobarfoo >> barfoobarfoo > bar > baz

네가 원한다면연결하다여러 파일의 내용을 저장하고 결과를 다른 파일에 추가한 다음 >>다음 명령과 함께 연산자를 사용해야 합니다 cat.

cat [OPTION]... [FILE]...

따라서 파일 이름을 사용하여 다음을 추가 a.txtb.txtc.txt있습니다.

cat a.txt b.txt >> c.txt

댓글에서 비슷한 질문을 했기 때문에 다음 두 명령은 한 줄 버전과 동일합니다.

cat a.txt >> c.txt
cat b.txt >> c.txt

답변2

이는 다음과 같이 매우 단순화될 수 있습니다.

compare='not '
[[ unix = unix ]] && compare=''
echo "they are ${compare}the same" | mail -s "comparison" [email protected]

이는 not변수의 기본값을 (후행 공백 포함) 설정합니다 $compare. 두 문자열이 동일하면 $compare가 빈 문자열로 설정됩니다. 그런 다음 포함된 변수와 함께 메시지를 인쇄하고 메일로 보냅니다.

관련 정보