問題タブ [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.

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

bash - ssh がサブシェルを -t なしで待機し、-t で強制終了するのはなぜですか?

次のようなbashスクリプトstart.shがあります。

これは私が望むことです: start.sh を実行すると、コード 0 で終了し、2 つのサブシェルがバックグラウンドで実行されます。各サブシェルが実行background_processorされ、それが終了すると実行されcleanup_on_exitます。これは、最初に start.sh を実行した端末を終了しても機能します (それが ssh 接続であっても)。

それから私はこれを試しました:

これは機能しstart.shますが、終了した後、ssh は明らかにサブシェルの終了も待機します。理由がよくわかりません。終了するとstart.sh、サブシェルは pid 1 の子になり、tty が割り当てられていないため、ssh 接続にどのように関連付けられているのか理解できません。

私は後でこれを試しました:

これで、プロセスに疑似 tty が割り当てられました。現在、ssh が終了するとすぐに終了することがわかりましたstart.shが、子プロセスも強制終了されます。

後者の場合、子プロセスに SIGHUP が送信されていると推測したので、次のようにしました。

それは実際に機能します!したがって、私は実際の問題に対する解決策を持っていますが、ここで SIGHUP/tty の微妙な点を把握したいと思います。

要約すると、私の質問は次のとおりです。

  1. start.sh親の pid が 1 であるにもかかわらず、ssh (-t なし) が終了後も子プロセスを待機するのはなぜですか?
  2. 端末から子プロセスを実行してその端末からログアウトすると発生しないのに、ssh (-t を使用) が明らかに SIGHUP で子プロセスを強制終了するのはなぜですか?
0 投票する
2 に答える
1509 参照

bash - xargs を使用してコマンドをサブシェルに渡すと、エイリアス内では機能しません

ディレクトリの下のすべてのgitリポジトリを見つけて、それぞれを順番に「git pull」するための簡単なスクリプトを作成しようとしていました。

これは私がこれまでに見つけたものです:

端末に貼り付けた場合、これは意図したとおりに機能します。ただし、これを.bashrcファイルのエイリアスにすると、次のようになります。

コマンドが機能しません。xargs によって起動されたサブシェルが受信しているものを出力するように変更しました。

実行すると、各サブシェルは改行を出力しますが、他には何も出力しません。

なぜこれが起こっているのか誰にも答えられますか?私の直感では、エイリアスの構文に問題があると言っていますが、何が起こっているのか正確にはわかりません。

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

bash - シェル コマンドで loop を使用したときのエラー メッセージ

私が間違っていることは何ですか?

返されるはずです:

それ以外の:

0 投票する
10 に答える
73793 参照

bash - サブシェルから親シェルの変数を設定します

サブシェルから親シェルに変数を設定するにはどうすればよいですか?

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

mysql - bashのサブシェルMySQLクエリ

データベースからレコードセットを取得しているUbuntu bashのサイクルで変数を設定しようとしていますが、この変数は以前の値に設定されています。コードは次のとおりです。

そして、このコードは毎回出力します:

127 127 127

しかし、私はこのブロックを置き換えました-:

mysql -h$DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME --skip-column-names --default-character-set=UTF8 -e "here is a query" | while read "here is getting variables from recordset";

サイクルの最後にjustwhile trueと break を使用すると、正常に動作し、次のように出力されます。

127 777 777 777

スクリプトはいくつかのサブシェルを作成し、そのサブシェルでその MySQL クエリを実行します。では、スクリプトでその変数を変更するにはどうすればよいでしょうか?

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

bash - サブシェルなしで変数に数学的計算の結果を代入する

私の質問は二重です。

初め:

サブシェルを使わずにこれを達成することは可能ですか?

またはこれ?

2 つ目を正しく理解していれば、'|を使用して 2 つのサブシェルを作成しています。

2番

この種のサブシェルを作成/使用すると、スクリプトの全体的なパフォーマンスに影響しますか?

- ありがとう