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
라는 의미는 아닙니다 . 이는 "명령을 실행 하고 해당 출력으로 덮어쓰기 "를 의미합니다. 이는 "명령을 실행 하고 해당 출력을 현재 콘텐츠에 추가 "를 의미합니다. 또한, 이것들은 연결할 수 없습니다. 무의미한.bar
foo
foo
bar
foo >> bar
foo
bar
foo > bar > baz
네가 원한다면연결하다여러 파일의 내용을 저장하고 결과를 다른 파일에 추가한 다음 >>
다음 명령과 함께 연산자를 사용해야 합니다 cat
.
cat [OPTION]... [FILE]...
따라서 파일 이름을 사용하여 다음을 추가 a.txt
할 b.txt
수 c.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가 빈 문자열로 설정됩니다. 그런 다음 포함된 변수와 함께 메시지를 인쇄하고 메일로 보냅니다.