Substitution de process de curl à bash en tant que root

J'essaie d'exécuter un script à partir de l'URL en tant que root avec cette command:

sudo bash <(curl -s http://copy.com/gLVZIqUubzcS/popcorn) 

Mais j'obtiens cette erreur:

 bash: /dev/fd/63: Aucun file ou dossier de ce type 

Français pour "introuvable". Des idées ce que cela pourrait être?

PS: Je cours Ubuntu 12.04

N'utilisez pas la substitution de process comme ça. En pratique, c'est à peu près tout:

 sudo sh <<CURL_SCRIPT $(curl -s http://copy.com/gLVZIqUubzcS/popcorn) CURL_SCRIPT 

Ou:

 curl -s http://copy.com/gLVZIqUubzcS/popcorn | sudo sh 

À less que le script que vous essayez d'exécuter utilise des bashisms les bashisms ci-dessus fonctionneront. S'il utilise la syntaxe bash only, vous devriez faire:

 curl -s http://copy.com/gLVZIqUubzcS/popcorn | sudo . /dev/stdin 

Bien que ce qui précède ne semble pas fonctionner, ce qui, je l'espère, est dû au fait que sudo pas le .dot embedded du shell .dot.

Alors faites ceci:

 curl -s http://copy.com/gLVZIqUubzcS/popcorn | sudo ${0#-} /dev/stdin 

Vous pourriez aussi simplement faire:

 sudo sh -c "$(curl -s http://copy.com/gLVZIqUubzcS/popcorn)" 

Vous n'avez pas besoin d'invoquer à nouveau l'exécutable bash lorsque vous pouvez utiliser les built-ins du shell à la place.

sudo ferme tous les descripteurs de files ouverts autres que stdin, stdout et stderr (voir man sudo ), donc la substitution de process ne fonctionne pas avec sudo .

Comparer

 $ sudo bash <(echo echo foo) bash: /dev/fd/63: No such file or directory 

et

 $ bash <(echo echo foo) foo 

Vous pouvez contourner ce problème (ou utiliser le drapeau -C pour sudo ), mais faire ce que vous essayez de faire est mauvais, même si vous le pratiquez. Si vous voulez juste exécuter le programme d'installation, récupérez d'abord une root , puis exécutez le rest sans sudo .