問題タブ [process-substitution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
748 参照

bash - 一部のプログラムは、入力ファイルのプロセス置換を受け入れませんか?

プログラムへの入力ファイルにプロセス置換を使用しようとしていますが、機能しません。一部のプログラムでは、入力ファイルのプロセス置換が許可されていないためですか?

以下は機能しません。

ただし、次のコントロールは機能します。

これは、プロセス置換自体は機能するが、clustalw プログラム自体がプロセス置換を好まないことを示唆しています-おそらく、非標準ファイルを作成するか、異常なファイル名のファイルを作成するためです。

プログラムがプロセス置換を受け入れないのは一般的ですか? これが問題であるかどうかを確認するにはどうすればよいですか?

Ubuntu 9.10 で GNU bash バージョン 4.0.33(1)-release (x86_64-pc-linux-gnu) を実行しています。Clustalw はバージョン 2.0.10 です。

0 投票する
3 に答える
4516 参照

bash - Bashプロセスの置換と同期

(おそらく、一部のプログラムが入力ファイルのプロセス置換を受け入れないかどうかに関連していますか?

一部のBash単体テストスクリプトでは、次のトリックを使用して、コマンドのstdoutとstderrをログに記録して表示しています。

このプロセスはstdoutへの出力を生成するため、$stdoutFファイルはデータを取得します。次に、データを出力しない別のコマンドを実行します。

ただし、空のテストが実行される前に、このプロセスが常に正常に終了するようには見えません(shunit-ngを使用)。

100回の実行テストでは、これは25回失敗しました。

syncファイルの空性をテストする前に呼び出すだけで十分な場合:

...および/またはコマンドのシーケンスを強制することによって機能する必要があります:

...および/またはファイルの代わりに直接teeそれを行うことは可能ですか?assertNull

更新sync答えではありません-以下のGillesの応答を参照してください。

更新2 : stdout、stderr、およびstdout+stderrを同期的に保存するためにさらに議論が行われました。答えてくれてありがとう!

0 投票する
0 に答える
318 参照

shell - プロセス置換 tcpdump スクリプト エラー

ターミナルで次のコマンドを書くと、完全に機能します

スクリプトに入れると、「unexpected "(" in line ...」のようなエラーが表示されます.ssh経由でサーバーで作業していて、アクセスできないため、正確なエラー行はありませんサーバーは BSD で実行する必要がありますが、現在どのシェルが使用されているかわかりません. 多数の pcap.gz ファイルに対してこのコマンドを実行する必要があるため、このような行をスクリプトに入れる必要があります.

0 投票する
2 に答える
18501 参照

bash - ループ内でグローバル変数を設定し、その値を保持する Bash -- または、ダミーの置換を処理する

私は C/C++ プログラマーであり、一般的に非常に愚かです (または、少なくとも bash のやり方には混乱を覚えます)。プロセス置換について頭を悩ませることはできません。

グローバル ブール値を定義し、ループ内のどこかに設定して、グローバル スコープで使用する必要があります。誰かが私のユースケースを達成できるように以下のコードを適応させる方法を可能な限り簡単に説明してください.

正直なところ、bash はそのタスクを実行できるとは思いません....次のブロックは次のようになります。

私が今必要としているのは、構造体のグローバル配列です。これにより、構造体をループし、デーモンを正しく初期化するための条件付きアクションを実行できます:/.

libc を使用して luaでこれを行うだけかもしれませんが、私が差し控える唯一の理由は、ロックをインストールする必要があることです。アドホックコードリポジトリが自分のマシンに好きなものを吐き出すのは好きではありません:D

0 投票する
5 に答える
1887 参照

bash - bash:execで使用されるプロセス置換を確実に終了するにはどうすればよいですか?

私が走ったら

その場合、結果は同期しません。次のようになります。

>(...)次のイテレーションに進む前に、プロセス置換が完了していることを確認するにはどうすればよいですか?

sleep 0.1後で挿入exec 3>&-することは役に立ちましたが、それはエレガントではなく、非効率的であり、常に機能することが保証されているわけではありません。

編集:例はばかげているように見えるかもしれませんが、それは説明のためだけのものでした。私がやっていることは、ループ内の入力のストリームを読み取り、ループ中に時々変化するプロセスに各行をフィードすることです。コードで簡単に説明:

0 投票する
1 に答える
393 参照

bash - Bash の終了とプロセスの置換

関数が失敗した場合、スクリプトを終了したいと思います。通常は問題ありませんが、プロセス置換を使用すると問題になります。

CodeGnomeの答えに基づいて、これはうまくいくようです

0 投票する
1 に答える
1053 参照

bash - Bash プロセス置換: `echo >(ls)` は何をしますか?

Bash のプロセス置換の例を次に示します。

次に、コマンドを待っているカーソルを取得します。

/dev/fd/63存在しません。私は何が起こると思います:

  1. で使用されているファイル名を出力します/dev/fd
  2. で実行lsする>(ls)

これは正しいですか?入力待ちのカーソルがあるのはなぜですか?

0 投票する
4 に答える
7168 参照

linux - プロセス置換を伴うシェルスクリプトの構文エラー

システムのバックアップに使用するこのシェルスクリプトがあります。行があります:

ご覧のとおり、私はこのブログ投稿を使用して、迷惑で役に立たない「ソケット無視」エラーをtarで除外しようとしています。

実行時にシェルから取得するものは次のとおりです。

/ bin / sysback:45行目:予期しないトークン>' /bin/sysback: line 45:tarの近くの構文エラー-Pzcpf / backups / backup --directory = / --exclude = proc --exclude = sys --exclude = dev / pts --exclude = backups --exclude = var / log / 2 >>(grep -v'ソケットは無視されます'>&2) '

0 投票する
5 に答える
41436 参照

bash - 標準出力を変数にキャプチャしますが、コンソールには表示します

いくつかの実行時間の長いプロセスを呼び出す bash スクリプトがあります。処理上の理由から、これらの呼び出しの出力を変数にキャプチャしたいと考えています。ただし、これらは長時間実行されるプロセスであるため、rsync 呼び出しの出力を事後ではなくリアルタイムでコンソールに表示したいと考えています。

この目的のために、私はそれを行う方法を見つけましたが、テキストを /dev/stderr に出力することに依存しています。/dev/stderr への出力は良い方法ではないと感じています。

上記の例では、rsync を数回呼び出しており、処理中のファイル名を確認したいのですが、後で解析するため、最終的には出力を変数に入れたいと考えています。

これを達成するための「よりクリーンな」方法はありますか?

違いがある場合は、Ubuntu 12.04、bash 4.2.24 を使用しています。

0 投票する
2 に答える
4428 参照

bash - bashプロセス置換でファイル記述子のアクセス許可が拒否されましたか?

標準出力でユーザーに通信したいbashスクリプトがありますが、ファイル記述子を介してサブプロセスにコマンドを送信します-次のようになります:

したがって、最初に次のようにサブプロセスを開始することで、「これを設定」できると思いました。

しかし、それはエラーを引き起こします:

これは予想されることですか?

何が起こっているのかわかりません。(私は何か間違ったことをしていますか?私のシステムに特別なセキュリティ設定があり、私がやろうとしていることを許可していない可能性がありますか?(Ubuntu Linux 12.10を実行しています。))

「回避策」 -以下は私がやろうとしていることと同等のようで、エラーなしで動作します。

または、ワンライナーとして:

なぜこれが機能しているのに、初期バージョンが機能していないのですか?

どんな助けでも大歓迎です。