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
.