複数のコマンドの出力を同じファイルに保存する

複数のコマンドの出力を同じファイルに保存する

たとえば、whoamiと日付。私はそれができます

whoami>/home/user/folder/file
date>>/home/user/folder/file

しかし、パスを2回入力せずに1行で完了できると確信しています。使ってみました。

|

ただし、最初のコマンドは常に無視されます。

答え1

サブシェルの使用

(whoami; date) > ~user/directory/file

答え2

echo / printfとコマンド置換を使用して、単一のリダイレクトでこれを実行できます。

printf '%s\n' "$(whoami)" "$(date)" > /home/user/folder/file

私の考えでは、これは良い解決策ではなく、読みやすく管理するのは簡単ではありません。特に、より多くのコマンドが追加された場合はさらにそうです。

パスを複数回入力したくない場合は、パスを変数に保存できます。

file=/home/user/folder/file
whoami>"$file"
date>>"$file"

ただし、これには複数のリダイレクトが必要です。

長いスクリプトまたはコマンドのサブセットを作成し、それに対して単一のリダイレクトを実行したい場合は、コマンドのグループ化を使用できます。

{
whoami
date
} > /home/user/folder/file

または1行で:

{whoami;date;} > /home/user/folder/file

関連情報