3 votes

Pourquoi Bash n'attend-il pas la lecture lorsqu'il est utilisé avec Curl ?

J'ai écrit un Bash script pour configurer Git . Il utilise le read builtin, mais quand je le fais :

bash < <(curl -s https://raw.github.com/gist/419201/gitconfig.bash)

Il n'attend pas que je saisisse des données. Comment faire pour qu'il attende ?

6voto

Lynch Points 2534

Je l'ai testé sans le < comme jcomeau_ictx l'a suggéré et ça a marché.

bash <(curl -s https://raw.github.com/gist/419201/gitconfig.bash | head -n 3)

Note : J'ai utilisé head -3 pour arrêter l'exécution après la lecture.

2voto

jon Points 21

Vous pouvez essayer de read directement à partir du terminal de contrôle /dev/tty pour réactiver l'entrée utilisateur dans le cas où stdin est déjà redirigé, c'est-à-dire que le descripteur de fichier 0 n'est pas ouvert sur un terminal.

Vous pouvez même utiliser le -t à l'option test pour gérer une telle situation de manière programmatique (cf. help test o man test ).

read git_name < /dev/tty       # per-command I/O redirection
#read git_name < /dev/console  # alternative

exec 0</dev/tty               # script-wide I/O redirection
read git_name

1voto

jcomeau_ictx Points 15736

Pour utiliser stdin, vous devez récupérer le fichier, disons dans /tmp, puis bash /tmp/gitconfig.bash . De la façon dont vous le faites maintenant, vous redirigez stdin, et Unix n'a pas de descripteur de fichier séparé pour l'entrée des commandes comme le fait VMS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X