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
メッセージ本文に同じかどうかを表示したいのですが、期待した結果は出ません。
ファイルの1つがまたは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
コメントで同様の質問をしたので、次の2つのコマンドは1行バージョンと同じです。
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
。 2つの文字列が同じ場合、$ compareは空の文字列に設定されます。次に、含まれている変数と一緒にメッセージを印刷してメールに送信します。