我有一个脚本使用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
?
答案 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