5

私は次のようにcurlを使用してインターネットからスクリプトファイルを調達しようとしています。そして、curlがファイルのダウンロードを開始する前にsource <( curl url ); echo done、 「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

何かの前後に「完了」がエコーされることについてはあまり心配していません。特に、ソースコマンドがスクリプトを読み取って処理しない理由が心配です。

このコマンドは、私のLinuxMintのbashでは期待どおりに機能しますが、CentOSサーバーのbashでは機能しません。

4

3 に答える 3

11

最初は、Bash3.2を使用していることに気づきませんでした。そのバージョンはプロセス置換から供給されませんが、Bash4などの新しいバージョンは供給されます。

ファイルを保存して、通常のソースを実行できます。

source /tmp/del

(コメントのファイルを使用するため)

/dev/stdinまたは、 here-stringと引用符で囲まれたコマンド置換を使用できます。

source /dev/stdin <<< "$(curl --insecure https://raw.github.com/gurjeet/pg_dev_env/master/.bashrc)"; echo done
于 2012-05-10T03:17:29.117 に答える
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>&-;
于 2012-05-09T17:37:16.370 に答える
0

次は機能しますか?

file=$(mktemp)
curl --insecure -o $file https://raw.github.com/gurjeet/pg_dev_env/master/.bashrc 
source $file
rm $file
于 2012-05-12T07:57:25.743 に答える