回答:
他の人が>
(上書き>>
)リダイレクト演算子と(追加)リダイレクト演算子の違いをすでに指摘しているので、いくつかの解決策を示します。
コマンドのグループ化{}
機能を使用してbash
、すべてのコマンドの出力を単一のファイルに送信できます。
{ sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ;} >checksum.txt
または、サブシェルでコマンドを実行できます()
:
( sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ) >checksum.txt
()
。
>
リダイレクタは、コマンドの出力(書き込みstdout
、ではないstderr
-あなたが使用し2>
たファイルへのそれの後に指定しているため)。既に存在する場合、ファイルは上書きされます。
この動作は、最初のコマンドで役立ちます。既存のファイルがある場合は、削除して新しいファイルで置き換える必要があります。
ただし、以前の出力を置き換えるのではなく、さらにすべての出力を追加する必要があるため、append-redirectorを使用する必要があります>>
。これにより、ファイルがまだ存在しない場合は作成されますが、リダイレクトされた出力が既に存在する場合はファイルに追加されます。
また、パイプ|
を使用して複数のコマンドを1行に記述しないでください。最初のコマンドの出力(stdout
)が2番目のコマンドの入力(stdin
)にリダイレクトされます。
セミコロン(;
)を使用して、bashに1つのコマンドをスクリプトファイルであるかのように実行するよう指示することができます。コマンドが失敗した場合(戻りコードが0でない場合)、残りのコマンドは引き続き実行されます。
または、論理演算子AND(&&
)またはOR(||
)を選択できます:2つのコマンドを接続するために
使用&&
する場合、最初のコマンドが成功した場合にのみ、2番目のコマンドが実行されます(戻りコードは0)。失敗すると、次のコマンドは実行されません。しかし、唯一の 2番目のコマンドを実行します最初の1が失敗した場合(リターンコードが0ではありません)!||
したがって、あなたの場合、セミコロンを使用することをお勧めします:
md5sum firefox.tar.gz > sha.txt ; sha1sum firefox.tar.gz >> sha.txt ; sha512sum firefox.tar.gz >> sha.txt
{}
か()
?ありがとうございました。