標準入力をファイルとして使用する方法

標準入力をファイルとして使用する方法

ファイルを入力として要求するコマンドがありますが、ファイルから入力を取得して一時stdinファイルを作成したくありません。

私は次のことをしたいと思います:

#!/bin/bash
osadecompile /dev/stdin < input_file.scpt

ただし、これはI / Oエラーを引き起こす可能性があります。これはうまくいきますが、可能ですか?いいえ一時中間ファイルを使用しますか?

#!/bin/bash
AS_FILE=$(mktemp)
cat - > "$AS_FILE"
osadecompile "$AS_FILE"
rm "$AS_FILE"

推測しましたが、私はmacOSでバッシュ3.2。しかしzsh 5.3ソリューションも歓迎されます。

ベストアンサー1

を使用すると、zsh次のことができます。

cmd =(cat)

=(...)パイプの代わりに一時ファイルを使用する3番目の形式のプロセス交換はどこにありますか?

bash5.1以下の場合、空行でzsh終わらない入力(およびNULバイトを含まないbashの場合)に対して、次のことができます。

cmd /dev/fd/3 3<<< "$(cat)"

ここで、文字列(zshから)と同様に、ドキュメント(Bourneシェルから)はbashとzshの両方で(削除された)一時ファイルを介して実装されます。 macOS(Linuxではない)では、ファイルが一度だけ開くと仮定しますcmd(その中で自由に検索できますが)。各オープンは、以前のオープンとファイルの同じ場所から始まるためですcmd。場所はファイルの先頭にあると仮定します。


1 bashの動作は5.0から変更されました。ここでbashは一時ファイルを書き込むことができないようにし始めました。

おすすめ記事