Je veux écrire cette boucle Bash pour ZSH
while true; do echo "print something"; read -p "pause"; done
5 Réponses :
On dirait que -p code> fait quelque chose de différent dans
zsh code>. Vous aurez probablement besoin de quelque chose comme
lire quelque_variable \? Pause code>. P>
Utilisation _ code> ne fonctionne pas: ZSH jette une erreur
ZSH: Variable en lecture seule: _ code>. Quoi que ce soit d'autre fonctionne cependant. Merci pour le conseil.
Étant donné que cela concerne le seul résultat de la recherche que je pouvais trouver, et je l'ai trouvé utile, mais toujours un peu déroutant, voici une autre façon de le mettre: Si tout ce que vous voulez faire, c'est écho une ligne de texte et attendre le utilisateur à appuyer sur Entrée ...
Lire \? "J'attends que vous appuyiez sur [ENTER] avant de continuer." Code> P>
pause "paused! press any key to continue" pause "you can write anything here :)"
dans de inclure une nouvelle ligne après l'invite: p> enfin, une fonction zsh code>:
man zshbuiltins code>: p>
-s code> n'échosez pas les caractères de retour si la lecture du terminal. LI>
-k code> Lire un seul caractère. Li>
nom? invite code> Nom est omis, l'entrée de l'utilisateur est donc stockée dans la variable code> réponse code> (et nous l'ignorons). Le premier argument contient un
? Code>, donc le reste de ce mot est utilisé comme une invite d'erreur standard lorsque la coque est interactive. LI>
ul>
$ '' '' ' code> est expliqué sous
citant code > Dans
man zshmisc code>. p>
Pause code> qui prend un message d'invite arbitraire dans un script qui fait ce que l'OP demande: p >
#!/usr/bin/env zsh
pause() read -s -k "?$*"$'\n'
while true; do
echo "print something"
pause "pause"
done
Si vous voulez une manière qui fonctionne dans les deux Bash code> et
zsh code> et assure des E / S / depuis le terminal:
# Prompt for a keypress to continue. Customise prompt with $*
function pause {
>/dev/tty printf '%s' "${*:-Press any key to continue... }"
[[ $ZSH_VERSION ]] && read -krs # Use -u0 to read from STDIN
[[ $BASH_VERSION ]] && </dev/tty read -rsn1
printf '\n'
}
export_function pause