ソースへのリダイレクトを処理できますか?

ソースへのリダイレクトを処理できますか?

私はコマンドによって生成されたプロセスを見たいと思いました。この回答これが私に必要なようです。ただし、スクリプトを自己完結したいので、ファイルをインポートするのではなく、プロセスリダイレクトを使用して動的に生成できますか?例えば。

#!/usr/bin/env bash
tasklist="(
  command1
  if abc; then
    command2
  elif
    command3
  fi
  command4
)"
source < <(echo "$tasklist") ; wait

私はcatそれをテストし、その後bash動作します。

#!/usr/bin/env bash
tasklist="(
  echo "command1"
  echo "command2"
  echo "command3"
)"
bash < <(echo "$tasklist")

sourceしかし、私はそれをする自信がなかった。以前に悪い経験をしたことがあります。 :/

ありがとうございます。

ベストアンサー1

とにかくBash 4.4以降で動作し、次のものを印刷hiしますhello

cmds='echo hi; var=hello'
source <(echo "$cmds") 
echo $var

source <(...)代わりに、すでに提供されているファイル名をprocesssource < <(...)に変更する必要があります。sourceリダイレクトは必要ありません。

ただし、これらのコマンドを変数に入れると直接実行できます eval "$cmds"。または、コマンドが固定されている場合は、中間変数について心配することなく直接実行してください。

echo hi; var=hello
echo $var

waitとにかく、私はあなたがそこで何をしたいのかわかりません。waitバックグラウンドジョブを待っていますが、ジョブはありません。これらすべての一般的なコマンドは&フォアグラウンドで実行されずに起動され、シェルはとにかく新しいコマンドを読み取る前にそのコマンドを待ちます。

おすすめ記事