タグ付けされた質問 「subshell」

2
サブシェルのBash構文強調表示
Bashのサブシェルに関連することが判明した大量の質問(「このパイプwhile readループで変数が増加しないのはなぜか?」サブシェルで実行されるコードは、親シェルで実行されるコードとは形式が異なります。教育用デバイスとして役立つかもしれません(違いcode | codeをcode < <(code)即座に確認してください)。これは存在しますか? 誰かがそれをjEditまたはVImに実装した場合のボーナスポイント。 明らかに完全である必要はありません(私の経験では構文の強調表示は(foo=bar; echo $foo;)ありcommand | while read ...ません)が、開始するのが難しいことではないかと疑っています。

2
サブシェルのPIDを取得するにはどうすればよいですか?
サブシェルのPIDを取得するにはどうすればよいですか? 例えば: $ echo $$ 16808 元のシェルが展開するため、これは機能しません$$。 $ ( echo $$ ) 16808 単一引用符が機能しないのはなぜですか?元のシェルが単一引用符を削除した後、サブシェル$$自体は展開しませんか? $ ( echo '$$' ) $$ なぜうまくいかevalないのですか?さevalサブシェルで実行?なぜ元のシェルのPIDが表示されるのですか? $ ( eval echo '$$' ) 16808 ありがとう。
13 bash  process  subshell 

2
サブシェルは子シェルと同じです
この2つの名前があります。サブシェルと子シェルです。 はい、子プロセスは次のいずれかによって開始されます: sh -c 'echo "Hello"' ( echo "hello" ) echo "$(echo "hello") echo "hello" | cat すべて同等で、同じ名前を共有していますか?すべて同じプロパティを共有していますか? POSIXには次の定義があります。 シェル実行環境は...で構成されています。 しかし、上記のリンクの最後の段落にはこれがあります: サブシェル環境は、無視されないシグナルトラップがデフォルトのアクションに設定されることを除いて、シェル環境の複製として作成されます。 そして特に: コマンド置換、括弧でグループ化されたコマンド、および非同期リストは、サブシェル環境で実行されます。さらに、マルチコマンドパイプラインの各コマンドはサブシェル環境にあります。.... sh -c 'echo "Hello"'そこに含まれていない、それもサブシェルと呼ばれるべき?

2
実行する前にサブシェルを展開しますか?
私はサブシェルを使用してコマンドを実行することが多く、何かを実行する前にサブシェルを展開したい場合があります。このようにして、実行していることを確認し、起こりそうなことを編集することもできます。 たとえば、次のコマンドラインを実行する前に展開して、サブシェルの結果を編集するにはどうすればよいですか? 例えば $ find -name "test.txt" /tmp/test.txt $ mv $(!!) /tmp/new.txt コマンドを実行する前に、次のようにサブシェルを展開したいと思います。 $ mv /tmp/test.txt /tmp/new.txt これを行う方法はありますか?

2
親シェルでサブシェルの変数を使用できるようにする方法
私は、Webサービスからのレポートの時間を計るために、簡単で汚いスクリプトを作成しました。 BASE_URL='http://example.com/json/webservice/' FIRST=1 FINAL=10000 for report_code in $(seq 1 $FINAL); do (time -p response=$(curl --write-out %{http_code} --silent -O ${BASE_URL}/${report_code}) ) 2> ${report_code}.time echo $response # <------- this is out of scope! How do I fix that? if [[ $response = '404' ]]; then echo "Deleting report # ${report_code}!" rm ${report_code} …

2
なぜPOSIX Shell Grammarの開始中括弧の後に中括弧コマンドグループにスペースが必要なのですか?
TL; DR:POSIXブレースグループで{予約語の後にスペースが必要なのに、サブシェルでは予約語の後にスペースがないのはなぜ(ですか? POSIXシェル文法は、ブレースグループとサブシェルを次のように定義します brace_group : Lbrace compound_list Rbrace subshell : '(' compound_list ')' 今、それを文字通り読んでいる場合、スペースは重要です。これは、次のように開き中括弧と括弧を区切るスペースが必要であることを意味します { echo hello world; } ( echo hello world ) これは、複合コマンドの定義とも一致します。 これらの複合コマンドのそれぞれには、最初に予約語または制御演算子があり、最後に対応するターミネーター予約語または演算子があります。 ただし、意味がないのはなぜか(list)、問題なく機能する( list )(その後ろのスペース(は不要)が、ブレースの展開には先行スペースが必要である、つまり機能{echo hello;}しないためである。 もちろん、予約語がシェルワードとして扱われると、フィールド分割の概念に合わせるために後でスペースが必要になりますが、定義自体はスペースについて言及していません。さらに、複合コマンドのPOSIX定義で両方が予約語と見なされている場合{、(これらの予約語の後のスペース文字に関して、それらの扱いが異なるのはなぜですか?現在、ksh(1)のマニュアルには次のように記載されています。 文字のシーケンスである単語は、引用符で囲まれていない空白文字(スペース、タブ、および改行)またはメタ文字(<、>、|、;、&、(および))で区切られます。 言い換えると、kshが(最初の単語がコマンドまたは変数の割り当てである単語の区切り文字として認識することは理にかなっています。ただし、POSIXは(メタ文字として言及されていないようです。POSIX文法に関して私が見つけた唯一の可能な説明{は、「トークン」と見なさ(れるというものです。 /* These are reserved words, not operator tokens, and are recognized when reserved words are recognized. */ …
10 shell  posix  subshell  syntax 

1
`nohup`を使用して実行されるプログラムの環境変数を設定するにはどうすればよいですか?
(私は既存のBashスクリプトを編集しているので、おそらくここで愚かな間違いをしています...) 次のように、環境変数を引数としてコマンドを保存するシェルスクリプトがあります。 COMMAND="mvn clean install -P $MAVEN_PROFILE" 次に、nohupおおよそ次のようにコマンドを実行します。 nohup $COMMAND > logfile これは機能します。 ここで、Mavenでアクセスできる環境変数を設定します。私は次のようなことをいくつか試しました: COMMAND="FORMAVEN=valueForMaven mvn clean install -P $MAVEN_PROFILE" ...しかし、それは単に次のように終了します: nohup: failed to run command `FORMAVEN=valueForMaven': No such file or directory ここには関係のない概念がいくつかあるように思いますが、どれも理解していないし、知りさえしていません。上記を行うには何が必要ですか?

2
$ BASHPIDと$$は異なる場合があります
「オレイリーのBASHポケットガイド」を読んでいます。と言いました: 現在のBashプロセスのプロセスID。場合によっては、$$と異なる場合があります。 上記の説明では、$BASHPID変数について説明しました。 質問:どのケースですか?

1
ネストされたコマンドの格納されたリターンコードで終了すると、DashとBashで異なるリターンコードが発生するのはなぜですか?
ランニング bash -c 'bash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;' で結果test1コンソールに印刷されてecho $?印刷するには1、コマンドが内部でどのように返す必要がありますので、正確である私の理解でいる[b/d]ash -cのに対し、返さ dash -c 'dash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;' 結果は同じ出力になりますが、0に従って戻りますecho $?。 シェルとポータブルシェルプログラミングの理解を深めるために、この違いを理解したいと思います。 Ubuntu 17.10(Artful Aardvark)でbash4.4.12およびdash0.5.8-2.3ubuntu1 を使用しています。

5
KornシェルでサブシェルのPIDを取得する方法($ BASHPIDと同等)
bashでは、この便利な変数があります。$ BASHPIDは常に、現在実行中のサブシェルのPIDを常に返します。kshでサブシェルのPIDを取得するにはどうすればよいですか?たとえば、次のコードを参照してください。 #!/usr/bin/ksh93 echo "PID at start: $$" function run_in_background { echo "PID in run_in_background $$" run_something & echo "PID of backgrounded run_something: $!" } function run_something { echo "*** PID in run_something: $$" sleep 10; } run_in_background echo "PID of run in background $!" これは以下を出力します: PID at start: 5328 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.