是否可以处理重定向到源?

是否可以处理重定向到源?

我发现我想观察(并等待)命令生成的进程这个答案这似乎正是我所需要的。除了我希望脚本是独立的,所以我可以使用进程重定向来动态创建它,而不是获取文件吗?例如;

#!/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 及更高版本中有效,它会打印hihello

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

您需要source <(...),而不是source < <(...)采用source进程替换已经提供的文件名。无需重定向。

不过,如果您将这些命令放在变量中,则可以直接运行 eval "$cmds"。或者,如果命令是固定的,则直接运行它们,而不用担心中间变量,即

echo hi; var=hello
echo $var

不管怎样,我不太确定你wait在那里想做什么。wait等待后台作业,但那里没有任何作业。所有这些常规命令都在未&在前台运行的情况下启动,并且 shell 无论如何都会在读取任何新命令之前等待它们。

相关内容