問題タブ [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.
python - PythonヒアドキュメントをBashプロセス置換の入力として使用するにはどうすればよいですか?
tmux の構成を定義し、この構成で tmux を起動する Python スクリプトがあります。構成は Python でヒアドキュメントとして保存されており、tmux の Bash 起動コマンドを実行するときに、これを Bash プロセスの置換で使用したいと考えています。
だから、私はこのようなことをしようとしています:
これを機能させるには何を変更する必要がありますか?
bash - Bashのプル「while」ループとプッシュ「while」ループの利点/欠点は何ですか?
bash の while ループでデータを消費する方法はたくさんあります。
その一つは
もう一つは
質問 1: どちらか一方を優先する必要があるのはいつですか。
質問 2: プロセスから読み取っているのではなく、ファイルを直接some_proc
使用redirection
している場合、そのファイルはいつ開かれ、閉じられますか。
linux - Bash スクリプト プロセス置換構文エラー: "(" 予期しない
このスクリプトを実行したい:
私はそれを次のように実行します:
そして、私は " Syntax error: "(" unexpected
" を取得します。同様の状況をいくつか見つけましたが、まだこれを解決できません。私はシェルスクリプトの初心者ですが、私が理解しているように:
- 私が使用するシバンは正しく、bash シェルを選択するため、プロセス置換構文が機能するはずです
- コマンドラインから同じことを試してみましたが、うまくいきました。で確認したところ
echo $0
、「bash
」が表示されました。コマンドラインでコマンドを実行することと、同じシェルを呼び出すスクリプトとの違いは何ですか?
単純なことかもしれませんが、説明や解決策が見つかりませんでした。
bash - なぜ source コマンドは bash 3.2 のプロセス置換で機能しないのですか?
私は次のシェルスクリプトを持っています:
ただし、以下に示すように、GNU bash 3.2 と 4.3 では動作が異なります。
これが 1 つのバージョンでしか機能しないのはなぜですか? それはバグですか、それとも追加機能ですか?
プロセスの置換は正常に機能しているようですが、ファイルのソース時に問題が発生しました。
これが予想される動作である場合source
、異なる bash バージョン間で互換性を保つために、標準入力からの何かに代わりに使用する必要がある他の構文は何ですか?
shell - プロセス置換での NUL バイトのスキップ/無視は標準化されていますか?
エグゼクティブサマリー
プロセス置換を行うときにシェルが NUL バイトをスキップするのは標準的な動作ですか?
たとえば、
お譲り致しabc
ます。printf
出力の 16 進ダンプで明らかに出力されていることが示されていても、NUL 値はスキップされます。
私の最初の考えは「単語分割」でした。ただし、実際のプロセス代替を使用する場合は、
結果は類似しており、=
単語分割は実行されません。
長い話
この質問に対する適切な答えを探しているときに、プロセス置換から変数に値を読み取るときに、私がかなり慣れている少なくとも 3 つのシェル実装 (ash、zsh、および bash) が NUL 文字を無視することに気付きました。
これが発生するパイプラインの正確なポイントは異なるようですが、最初から存在しなかったかのように、一貫して NUL バイトがドロップされます。
いくつかの実装を確認しましたが、これは正常な動作のようです。
ash
inputをスキップし'\0'
ますが、これが純粋な偶然なのか意図した動作なのかは、コードからは明らかではありません。
bash
ソース コードには、プロセス置換で NUL 値をスキップしたことを示す明示的な#ifdef
警告が含まれています。
zsh
さんの行動についてはよくわかりません。(内部関数'\0'
で定義されているように) メタ文字として認識し、特殊なサロゲート文字を先頭に追加し、入力文字にビット #5 を設定して、基本的にメタ文字を解除します。これにより、makeもスペースになります) 。imeta()
Meta
'\0'
' '
value
上記のprintf
コマンドにメタ文字が含まれているという証拠がないため、これは後で削除されるようです。私はzsh
の内部構造に慣れていないので、これを大いに参考にしてください。また、副作用のないステートメントにも注意してください。
zsh
に NUL (メタエスケープ) を含めることもできることに注意してください(たとえば、なしIFS
で単語を分割することが可能になります)。したがって、 との値に応じて異なる結果が得られるはずです(フィールド分割を行います)。find -print0
xargs -0
printf '\0abc' | read value
value=$(printf '\0abc')
IFS
read
bash - プロセスの置換はbashで機能しますが、zshでは機能しません
プロセス置換を使用して while ループにフィードしようとしています。
これは bash では正常に機能しますが、zsh では機能しません。次のエラーが表示されます。
zsh 4.3.10 を使用しています。
これをzshで動作させるにはどうすればよいですか?
更新:完全なコードを共有するために質問を変更しました
bash - Bash リダイレクト: 名前付きパイプと EOF
次のコードを使用します。
アプローチ #3 がハングするのに、他のアプローチはハングしないのはなぜですか? アプローチ #3 をハングさせない方法はありますか?
理論的根拠: 準無名パイプを使用して、非同期で実行されているいくつかのサブプロセスを接続したいので、ファイル記述子がそれを指すようにした後、パイプを削除する必要があります。