在继续编写脚本之前,如何让bash等待进程完成?

时间:2012-11-02 02:38:40

标签: sed process wait complete

我有一个脚本使用sed来搜索和替换一个简单的.yaml文件并输出一个.sh文件,然后该文件应该与源一起提取。我的问题是,在调用sed之前,我无法弄清楚如何.sh输出source

sed -e 's/:[^:\/\/]/="/g;s/$/"/g;s/ *=/=/g' in.yaml > out.sh
source out.sh

修改
我收到此错误

script.sh: line 2: out.sh: No such file or directory

结束编辑

我试过

sed -e 's/:[^:\/\/]/="/g;s/$/"/g;s/ *=/=/g' in.yaml > out.sh
wait $!
source out.sh

,但我认为这需要进程才能进入bg。我试着把它扔进bg,但是我得到了bg: no job control错误信息。我读到,压倒这是不好的做法,所以我试图避免这样做。

如何让source等待sed

2 个答案:

答案 0 :(得分:1)

您不必做任何其他事情:

sed -e 's/:[^:\/\/]/="/g;s/$/"/g;s/ *=/=/g' in.yaml > /path/to/out.sh
source /path/to/out.sh

shell默认情况下逐个运行命令,因此当source完成时它将运行sed

对于您的错误,您应该将out.sh的完整路径放在源命令中。

答案 1 :(得分:1)

source命令在其名称不包含斜杠时查找PATH上的源文件(但它只需要是可读的;它必须是可执行的)。您可能没有PATH上的当前目录。

尝试:

source ./out.sh