13
votes

Comment puis-je faire une pause dans ZSH?

Je veux écrire cette boucle Bash pour ZSH

while true; do echo "print something"; read -p "pause"; done


0 commentaires

5 Réponses :


11
votes

On dirait que -p fait quelque chose de différent dans zsh . Vous aurez probablement besoin de quelque chose comme lire quelque_variable \? Pause .


1 commentaires

Utilisation _ ne fonctionne pas: ZSH jette une erreur ZSH: Variable en lecture seule: _ . Quoi que ce soit d'autre fonctionne cependant. Merci pour le conseil.



13
votes

É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."


0 commentaires

1
votes
pause "paused! press any key to continue"
pause "you can write anything here :)"

0 commentaires

17
votes

dans zsh code>: xxx pré>

de 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>

    inclure une nouvelle ligne après l'invite: p> xxx pré>

    $ '' '' ' code> est expliqué sous citant code > Dans man zshmisc code>. p>

    enfin, une fonction 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
    


0 commentaires

1
votes

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


0 commentaires