問題タブ [subshell]
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.
bash - Bash: シェル呼び出しのコンテキストでスクリプトを実行する
私の理解では、サブシェルのような構文を使用して BASH シェル内でスクリプトを実行する$ ./myscript.sh
と、そのシェルでコードが実行され、STDOUT および STDERR 出力がシェルに出力され、シェルから STDIN が取得されます。これが、スクリプトが対話型である方法です。
ファイル「myscript」の一番上の行は#!/bin/bash
、スクリプト ファイル内の構文を実行するために使用されるインタープリターを示しています。
この構文を使用するsource myscript.sh
と、スクリプト内のコードはサブシェルではなく現在の環境に「引き込まれ」、そこで実行されます。次のコードをスクリプトで実行して$ ./myscript.sh
、現在のシェルに影響を与えることはできません。
を削除してこのスクリプト#!/bin/bash
を使用するとsource
、コマンド プロンプトが変更されます。$ ./myscript.sh
サブシェルではなく、現在のシェルに変更を加えることができるような方法でスクリプトに配置できますか?
linux - Bash スクリプト - 子スクリプトの stderr を親の stdout にリダイレクトします
単純なものが欠けていると確信していますが、実行スクリプトを使用していくつかのユーティリティ スクリプトを呼び出しており、1 つのパイプを介してユーティリティからのすべての出力を処理したいと考えています。私の問題は、ユーティリティが stderr を使用してエラー状態を報告することですが、それを親スクリプトで使用するためにキャプチャすることはできません。
親スクリプト:
子スクリプト
私が期待しているのは、stderr
のchild
(およびそのすべてのコマンド)がリダイレクトされるstdout
(したがって出力がない)ことですが、実行すると端末parent
にError
エコーされます(「印刷」は/ dev/nullに送信されます)。
shell - コマンドライン引数なしで(ソースではなく実行によって)サブシェルに引数を渡す方法は?
たとえば、メイン シェル プログラムmain.sh
があり、別のサブシェル プログラムがありsub.sh
ます。変数 var をサブシェルに渡したいのですが、コマンドライン引数を使用したくありません。コード例は次のとおりです。
出力を見たい:1
この質問が奇妙であることは承知していますが、この機能は私のニーズに最適です。sub.sh
実際のプログラムには渡す変数がたくさんあるため、ソースを取得できません...ありがとう!
編集:sub.sh
バックグラウンドで実行して10時間かかり、sub.sh
別の変数に対してフォアグラウンドで別のものを実行したい場合はどうすればよいb
ですか?
bash - サブシェルで開始されたプロセスのBash取得プロセスID
ここでこの質問を見ていますが、うまくいかないようです: How to get the process id of a bash subprocess on command line
したがって、次のようなサブシェルで開始するコマンドがあります。
そのスリープ コマンドのプロセス ID を取得し、それを待つにはどうすればよいでしょうか。
上記のリンクからのプロセス ID が表示されたものと一致しない場合に ps を実行すると。
ありがとう。
bash - $$ が親プロセスと同じ ID を返すのはなぜですか?
Bash に問題がありますが、その理由がわかりません。
シェルの下で、次のように入力します。
「getpid」は、次のような現在の pid を取得する C プログラムです。
私を混乱させるのは、次のことです。
- 「(コマンド)」はサブプロセスだと思います(そうですか?)、そのpidは親pidとは異なるはずですが、同じです。なぜ...
- プログラムを使用して括弧の間に pid を表示すると、表示される pid が異なります。正しいですか?
- 「$$」はマクロのようなものですか?
手伝って頂けますか?
bash - コマンド置換は、同じコマンドを単独で実行するよりも多くのサブシェルを生成するのはいつですか?
昨日、bash でコマンド置換を使用すると、不要なサブシェルが生成されることが示唆されました。アドバイスは、このユースケースに固有のものでした:
私が理解できる限り、これはこのユースケースには正しいようです。ただし、これを確認しようとして簡単に検索すると、混乱し矛盾するアドバイスが大量に出てきます。コマンド置換をすべて使用すると、サブシェルが生成されるという一般的な知恵があるようです。例えば:
コマンド置換は、コマンドの出力に展開されます。これらのコマンドはサブシェルで実行され、それらの stdout データは、置換構文が展開されるものです。(ソース)
掘り続けない限り、これは十分に単純に思えますが、掘り下げ続けると、そうではないという提案への参照を見つけ始めるでしょう。
コマンド置換は必ずしも subshell を呼び出すとは限らず、ほとんどの場合は呼び出されません。それが保証する唯一のものは順不同の評価です: 最初に置換内の式を評価し、次に置換の結果を使用して周囲のステートメントを評価します。(ソース)
これは理にかなっているように思えますが、本当ですか? サブシェル関連の質問に対するこの回答man bash
は、次のことに注意してください。
パイプライン内の各コマンドは、個別のプロセスとして (つまり、サブシェル内で) 実行されます。
これは私を主な質問に導きます。正確には、コマンド置換によって、同じコマンドを分離して実行するために、とにかく生成されなかったサブシェルが生成される原因は何ですか?
次のケースを検討し、余分なサブシェルのオーバーヘッドが発生するケースを説明してください。
これらの各ペアは、実行するサブシェルの数が同じですか? POSIX と bash の実装に違いはありますか? コマンド置換を使用するとサブシェルが生成され、同じコマンド セットを単独で実行しても生成されない他のケースはありますか?
multithreading - 10スレッドプロセスの設計
ディレクトリに約 500 個の奇妙なデータ ファイルがあります。コマンドを使用してこれらのファイルを処理しています。問題は、もちろん、どのユーティリティもそうであるように、それぞれを順番に取得することです。当面、私のプロセスが行うことは、約 500 のプロセスを生成し、それらを 10 のバッチでずらして、それぞれに待機が散在するようにすることです。ちょうどこのような 。1 ファイル == このデザインごとに 1 プロセス。
そのため、システムを同時に叩くことはありません。このコマンドは、実際には別の一連のシェルと C コードであり、データ ファイルを解析し、Oracle への接続を伴ういくつかのチェックを行います。コマンドを実行するたびに新しい DB 接続を開かないように、これを再設計したいと思います。100 個のファイルがあるとします。100 個の個別の接続ではなく、10 個の DB 接続のみを開きたいと考えています。私がやりたい方法は、まず私が持っているファイルの数を数えることです。それらを 10 で割ります。各分割は 10 個のファイルの「バッチ」です。したがって、100 個ではなく 150 個のファイルがあり、プロセスは自動的に 15 個のディレクトリを作成する必要があります。各ディレクトリはその中に10個のファイルを移動する必要があり、実行できます
10ファイル== この設計による1プロセス。
これをどのように行うことができるかについての提案は、vis コマンドで確認できます。タイ