我想源码来自于网上使用curl的脚本文件,如: source <( curl url ); echo done
source <( curl url ); echo done
,而我看到的是,“完成”卷曲甚至开始下载文件之前回荡!
下面是实际的命令和输出:
-bash-3.2# source <( curl --insecure https://raw.github.com/gurjeet/pg_dev_env/master/.bashrc ) ; echo done
done
-bash-3.2# % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2833 100 2833 0 0 6746 0 --:--:-- --:--:-- --:--:-- 0
我不是太担心“完成”之前或之后任何事情,我特别关注为什么source命令不会读取和脚本行为被回荡!
该命令可以按预期在我的LinuxMint的庆典,但不能在CentOS的服务器的庆典!
起初,我没有注意到你正在使用bash 3.2。 该版本将不会从一个进程被代替,但后来的版本,如猛砸4做。
您可以保存文件,然后执行它的正常来源:
source /tmp/del
(使用来自您的评论的文件)
或者,你可以使用/dev/stdin
和下面的字符串和引用命令替换:
source /dev/stdin <<< "$(curl --insecure https://raw.github.com/gurjeet/pg_dev_env/master/.bashrc)"; echo done
尝试这个:
exec 69<> >(:);
curl url 1>&69;
source /dev/fd/69;
exec 69>&-;
这应该强制揭掉壳等待从管道的所有数据。 如果不工作这一个意愿:
exec 69<> >(:);
{ curl url 1>&69 & } 2>/dev/null;
wait $!
source /dev/fd/69;
exec 69>&-;
做了以下工作?
file=$(mktemp)
curl --insecure -o $file https://raw.github.com/gurjeet/pg_dev_env/master/.bashrc
source $file
rm $file