標準出力リダイレクトまたはパイプから一時ファイルを作成する

標準出力リダイレクトまたはパイプから一時ファイルを作成する

一部のコマンドはstdoutとしてのみ出力されます。
一部のツールはファイルにのみ機能します。
互いに貼り付けるコマンドはありますか?

設計された簡単な例:

diff $(echo 1 | stdout-to-temp-file) $(echo 2 | stdout-to-temp-file)

私の実際のユースケース:現在の解決策:

git show HEAD:$1 > /tmp/left && meld /tmp/left $1

私の実際のユースケースは次のとおりです。

meld $(git show HEAD:$1 | stdout-to-temp-file) $1

他のいくつかの状況でも使用されます(例:gitまたはmeld専用の変更を探していません)。

答え1

<出力をにリダイレクトできますstdin

どのように動作するのかわかりませんが、melddiffの例に関連して動作する方法は次のとおりです。

一時ファイルの使用

$ cmd1 > file1.tmp
$ cmd2 > file2.tmp
$ diff file1.tmp file2.tmp

一時ファイルなし

$ diff <(cmd1) <(cmd2)

使用しているシェルによって構文が異なる場合があります(私はksh88を使用しています)。

答え2

mktemp一時ファイル名が生成されます。ファイル名を変数に保存し、両方のスロットで対応するファイル名を使用します。

特定の問題をよりよく解決するには、次を確認してください。git difftool。 Meldを使用するように設定しましたが素晴らしいです。

答え3

私はmeldを使用したことがありませんが、通常はほとんどのcliユーティリティの-パラメータを使用してこれを行うことができます。例えば

cat /path/to/left/file | diff /input/from/right/file -

特に meld コマンドの場合は、次のことを試すことができます。

git show HEAD:$1 | meld - $1

関連情報