与文件不工作bash的源命令来自互联网curl'd(Bash's source co

2019-09-17 03:05发布

我想源码来自于网上使用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的服务器的庆典!

Answer 1:

起初,我没有注意到你正在使用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


Answer 2:

尝试这个:

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>&-;


Answer 3:

做了以下工作?

file=$(mktemp)
curl --insecure -o $file https://raw.github.com/gurjeet/pg_dev_env/master/.bashrc 
source $file
rm $file


文章来源: Bash's source command not working with a file curl'd from internet
标签: bash shell url